为什么 Control.Monad.Reader 中有 Reader monad 和 MonadReader monad?包文档讨论了 Reader monad,然后直接进入 MonadReader 文档,没有任何解释。这些单子有什么区别?阅读这些参考页面让我感到困惑。有趣的是,Haskell wikibook 的 Reader monad 页面尚未编写!
问问题
531 次
1 回答
15
没有MonadReader
单子。那是一类单子,即那些可以用作a的单子Reader
(通常,因为它们被定义为ReaderT
在某处带有 a 的单子变压器堆栈)。所以,
Reader
是仅充当阅读器的特定 monad,因为它ReaderT
仅适用于琐碎的身份 monad:type Reader r = ReaderT r Identity
因此,它显然是 的一个实例
MonadReader
,但没有做任何其他事情。MonadReader
is 是可以从某些环境中读取的所有monad 的类。同样,这包括Reader
它自己,也包括MaybeT (ReaderT Int (ListT IO))
.
于 2016-09-07T09:36:38.913 回答