任何方法来恢复足够的懒惰,在单子上结个结



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

n <- myinstr n x

,理论上,myinstr应该运行x得到一个值,这个值将成为nmyinstr运行在State单子内,将n置于状态,但这并不影响x的计算。

我试过使用DoRecmfix的原始实现,

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

但是东西凝固了。是否有任何方法来修复我的代码(或方法论设计它正确的第一次),或者我应该写一些更直接的东西?

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

最新更新