11

我想通过打结来写一段漂亮的代码(节省我很多时间来实现)。大致是这样的,

n <- myinstr n x

理论上,myinstr应该运行x以获得一个值,这将成为n. myinstrStatemonad 中运行的 , 将n进入状态,但这不会影响x' 的计算。

我尝试过使用DoRec和幼稚的实现mfix

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

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

4

1 回答 1

14

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

于 2011-12-05T03:21:42.307 回答