繁体   English   中英

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

[英]Applicative instance for State and other MTL monads?

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

所以这是我的问题:

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

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

最终我希望能够以一种应用风格使用State (正如推荐的那样),但是如果我必须使用WrappedMonad数据构造函数WrappedMonad我的代码,那么它似乎不是一个胜利。 我也可以完全忽略WrappedMonad ,并以与IOST等相同的方式自己定义Applicative实例:就returnap ......但这似乎也很傻。

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

或者,你可以打开GHCI,进口Control.Monad.State和Control.Applicative和使用:i Applicative列出的实例Applicative:i StateT列出了该类别StateT有实例( State是一个类型别名StateT ,其中一个参数已修复)。 要么表明确实存在这样的实例。

mtl monad的Applicative实例不能在基础文档中列出,因为此时没有可用的mtl。 好消息是,mtl具有应用实例StateT,例如 mtl-2.0.0.0。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM