查看 的文档Control.Applicative
,我注意到它们具有某些 monad 的实例声明(例如IO
,Maybe
尤其是ST
),但没有 MTL monad 的实例,例如State
and RWS
。相反,它看起来像定义了一个通用WrappedMonad
类型,我猜它是为了涵盖所有其他情况。
所以这是我的问题:
为什么没有
Applicative
MTL monad 的实例?到目前为止,我自己能找到的最佳答案是一个三年前的帖子,其中有人实施了这些实例,但被立即忽略了。有什么关系
WrappedMonad
?我在 Reddit 上找到了一篇简要解释它的帖子,但我想我对如何使用它感到困惑。
最终,我希望能够以State
应用风格使用(正如向我推荐的那样),但如果我不得不用WrappedMonad
数据构造函数乱扔代码,那么这似乎不是一场胜利。我也可以完全忽略,并以与 相同的方式自己WrappedMonad
定义实例,依此类推:就and ... 而言,但这似乎也很愚蠢。Applicative
IO
ST
return
ap