Reader 和 MonadReader
Reader and MonadReader
为什么Control.Monad.Reader中有一个Reader monad和一个MonadReader monad?包文档讨论了 Reader monad,然后直接启动到 MonadReader 文档,没有任何解释。这些单子有什么区别?阅读这些参考页让我非常困惑。有趣的是,Haskell wikibook 的 Reader monad 页面尚未编写!
没有 MonadReader
monad。那是一个 class 的单子,即那些可以 用作 和 Reader
的单子(通常,因为它们被定义为在某处带有 ReaderT
的 monad 转换器堆栈)。所以,
Reader
是 只有 充当 reader 的特定单子,因为它只应用了 ReaderT
到平凡的身份单子:
type Reader r = ReaderT r Identity
因此它显然是 MonadReader
的一个实例,但没有做任何其他事情。
MonadReader
是 all monad 的 class 可以从某些环境读取。同样,这包括 Reader
本身,还包括 MaybeT (ReaderT Int (ListT IO))
.
为什么Control.Monad.Reader中有一个Reader monad和一个MonadReader monad?包文档讨论了 Reader monad,然后直接启动到 MonadReader 文档,没有任何解释。这些单子有什么区别?阅读这些参考页让我非常困惑。有趣的是,Haskell wikibook 的 Reader monad 页面尚未编写!
没有 MonadReader
monad。那是一个 class 的单子,即那些可以 用作 和 Reader
的单子(通常,因为它们被定义为在某处带有 ReaderT
的 monad 转换器堆栈)。所以,
Reader
是 只有 充当 reader 的特定单子,因为它只应用了ReaderT
到平凡的身份单子:type Reader r = ReaderT r Identity
因此它显然是
MonadReader
的一个实例,但没有做任何其他事情。MonadReader
是 all monad 的 class 可以从某些环境读取。同样,这包括Reader
本身,还包括MaybeT (ReaderT Int (ListT IO))
.