是否需要访问内部结构
一个 monad 来编写 monad 转换器?
例如:我想要GetT
- 变压器Get
来自 Data.Binary.Get 的 monad,
但这个模块没有暴露内部结构Get
单子。这是否意味着唯一
对我来说方法是添加GetT
直接到Data.Binary.Get模块?
一般来说,是的。在此示例中查看内部单子(此处为列表单子)如何“撤消”外部单子“较早”操作的效果:
> execWriterT (tell "Hi" >> tell "Ho" >> lift [()])
["HiHo"]
> execWriterT (tell "Hi" >> tell "Ho" >> lift [])
[]
现在假设您可以将每个 monad 变成 monad 转换器。然后你就可以构建一个IOT
monad 变压器,这可以发射一枚导弹,但随后又将其撤消:
> execIOT (launchMissile >> lift [])
因此,在不查看定义的情况下,不可能将任意 monad 转换为 monad 转换器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)