State和其他MTL monad的应用实例?

mer*_*ict 6 haskell state-monad applicative

查看文档Control.Applicative,我注意到它们具有某些monad的实例声明(例如IO,Maybe特别是ST),但是没有MTL monad的实例,例如StateRWS.相反,它看起来像是WrappedMonad定义了一个通用类型,我猜测它是涵盖所有其他情况.

所以这是我的问题:

  1. 为什么没有ApplicativeMTL monad的实例?到目前为止,我自己能够找到的最好的答案是一个三年前的帖子,有人实现了这些实例,并被忽略了.

  2. 有什么处理WrappedMonad?我在Reddit上发现了一篇简短解释的帖子,但我觉得我对如何使用它很困惑.

最终我希望能够以State一种适用的方式使用(如推荐的那样),但如果我不得不用WrappedMonad数据构造函数丢弃我的代码,那么它似乎不是一个胜利.我也可以不理会WrappedMonad完全,并定义Applicative实例自己,是为做了同样的方式IO,ST等等:在以下方面returnap......但似乎愚蠢的为好.

mok*_*kus 8

该文档仅基于base包的内容生成,该包不包含State- 因此它不包含Applicative实例.如果您查看MTL文档,您将看到Applicative列出的实例.

或者,您可以打开GHCi,导入Control.Monad.State和Control.Applicative,并用于:i Applicative列出实例Applicative:i StateT列出StateT具有实例的类(StateStateT其中一个参数已修复的类型别名).要么表明确实存在这样的实例.