为什么在Control.Monad.Reader中有Reader monad和MonadReader monad ?包文档讨论了Reader monad,然后直接进入MonadReader文档,没有任何解释。这些单子之间的区别是什么?阅读这些参考资料页让我感到非常困惑。有趣的是,Haskell维基书的Reader单子页面还没有写出来!
没有MonadReader
单子。这是monad的类,即那些可以用作 Reader
的monad(通常,因为它们被定义为在某处具有ReaderT
的monad变压器堆栈)。
-
Reader
是仅作为读取器的特定单子,因为它的ReaderT
仅适用于平凡的身份单子:type Reader r = ReaderT r Identity
它显然是
MonadReader
的一个实例,但不做任何其他事情。 -
MonadReader
是可以从某些环境中读取的所有单子的类。同样,这包括Reader
本身,也包括MaybeT (ReaderT Int (ListT IO))
。