【发布时间】:2011-11-03 00:34:33
【问题描述】:
查看Control.Applicative 的文档,我注意到它们具有某些monad 的实例声明(例如IO、Maybe 和特别是ST),但是没有MTL monad 的实例,例如@987654330 @ 和 RWS。相反,它看起来像定义了一个通用的WrappedMonad 类型,我猜它是为了涵盖所有其他情况。
所以这是我的问题:
为什么没有
Applicative用于 MTL monad 的实例?到目前为止,我自己能找到的最佳答案是 three year old post,其中有人实现了这些实例,但被立即忽略了。WrappedMonad是怎么回事?我找到了一个 post on Reddit 简要解释了它,但我想我对如何使用它感到困惑。
最终我希望能够以应用风格使用State(就像recommended to me 一样),但如果我不得不用WrappedMonad 数据构造函数乱扔我的代码,那么它看起来不像是赢。我也可以完全忽略WrappedMonad,并以与IO、ST 等相同的方式自己定义Applicative 实例:就return 和ap 而言...看起来也很傻。
【问题讨论】:
-
如果我们有 Functor => Applicative => Monad 和 (Alternative, Monad) => MonadPlus
标签: haskell state-monad applicative