需要访问一个单子的内部结构的单子变压器?(Is access to the internal str

2019-06-26 17:50发布

是否需要访问一个单子写的单子变压器的内部结构?

例如:我想有GetT -变压器Get来自Data.Binary.Get单子,但此模块不公开的内部Get单子。 这是否意味着我的唯一方法是添加GetT直接Data.Binary.Get模块?

Answer 1:

在一般情况下,是的。 请参见本例是如何内单子(这里的列表单子)可以“撤销”外单子的“早期”行动的效果:

> execWriterT (tell "Hi" >> tell "Ho" >> lift [()])
["HiHo"]
> execWriterT (tell "Hi" >> tell "Ho" >> lift [])
[]

现在,假设你可以把每一个单子到单子转换。 然后,你就可以构建一个IOT单子转换,这可能会发射导弹,但随后撤消它:

> execIOT (launchMissile >> lift [])

因此,它不可能把一个任意的单子,不看的定义,成为一个单子转换。



文章来源: Is access to the internal structure of a monad required for a monad transformer?