任何方法可以恢复足够的懒惰以打结monad结?

时间:2011-12-05 00:41:47

标签: haskell monads tying-the-knot monadfix

我希望tying the knot编写一些代码(节省我很多时间来实现)。它大致是这样的,

n <- myinstr n x

理论上,myinstr应运行x以获取值,该值将变为n。在myinstr monad中运行的State会将n置于状态,但这不会影响x的计算。

我已尝试使用DoRecmfix的简洁实施,

instance Monad  => MonadFix (MyMonad ) where
    mfix f = fix (\mx -> mx >>= f)

但事情冻结了。有没有任何方法可以修复我的代码(或者第一次正确设计代码的方法),还是应该写一些更直接的东西?

1 个答案:

答案 0 :(得分:14)

没有通用的方法可以将任意monad作为MonadFix的实例。实际的代码取决于monad,并且它甚至不可能适用于所有monad。 您可以查看各种monad以了解它是如何完成的。如果你的monad实际上是State,那么应该已经有了一个实例。