Reader和MonadReader

时间:2016-09-07 09:25:28

标签: haskell monads reader-monad

为什么Control.Monad.Reader中有一个Reader monad和一个MonadReader monad?包文档讨论了Reader monad,然后直接启动MonadReader文档,没有任何解释。这些monad有什么区别?阅读这些参考页面让我感到困惑。有趣的是,Haskell wikibook的Reader monad页面尚未编写!

1 个答案:

答案 0 :(得分:13)

没有MonadReader monad。这是monad的,即那些可以用作 a Reader的monad(通常,因为它们被定义为monad变换器堆栈,在某处ReaderT。所以,

  • Reader作为读者的特定monad,因为ReaderT仅应用于普通身份monad:

    type Reader r = ReaderT r Identity
    

    因此它显然是MonadReader的一个实例,但没有做任何其他事情。

  • MonadReader所有 monad的类,可以从某些环境中读取。同样,这包括Reader本身,还包括MaybeT (ReaderT Int (ListT IO))