【发布时间】:2016-12-12 07:53:34
【问题描述】:
据我所知,我们可以实现MonadReader s (StateT s m) 实例:
instance MonadReader s (StateT s m) where
ask = get
local f m = do
s <- get
put (f s)
m
put s
即为什么不是
class MonadReader s m => MonadState s m | s -> m where ...
类似地,我们可以有 Monoid s => MonadWriter s (StateT s m) 实例。
选择之间有什么深层次的原因吗?
这个问题的动机是 MonadError 和 MonadWriter 是否应该
MonadChronicle的超类
【问题讨论】:
-
这只是mtl的限制。您可以查看其他库。 This post可以帮助你更多。
-
@freestyle,那个帖子是关于稍微不同的问题。我试图澄清这个问题:为什么 MonadReader 不是 MonadState 的超类
-
我想你会想问另一个问题:当我的堆栈上有 State monad 时,为什么我不能使用 MonadReader 或 MonadWriter 接口?所以我只是试着回答一下。
标签: haskell monad-transformers