我希望tying the knot编写一些代码(节省我很多时间来实现)。它大致是这样的,
n <- myinstr n x
理论上,myinstr
应运行x
以获取值,该值将变为n
。在myinstr
monad中运行的State
会将n
置于状态,但这不会影响x
的计算。
我已尝试使用DoRec
和mfix
的简洁实施,
instance Monad => MonadFix (MyMonad ) where
mfix f = fix (\mx -> mx >>= f)
但事情冻结了。有没有任何方法可以修复我的代码(或者第一次正确设计代码的方法),还是应该写一些更直接的东西?
答案 0 :(得分:14)
没有通用的方法可以将任意monad作为MonadFix
的实例。实际的代码取决于monad,并且它甚至不可能适用于所有monad。
您可以查看各种monad以了解它是如何完成的。如果你的monad实际上是State
,那么应该已经有了一个实例。