我想通过打结来写一点漂亮的代码(节省我很多实现的时间)。它大致是这样的
n <- myinstr n x
,理论上,myinstr
应该运行x
得到一个值,这个值将成为n
。myinstr
运行在State
单子内,将n
置于状态,但这并不影响x
的计算。
我试过使用DoRec
和mfix
的原始实现,
instance Monad 𝔪 => MonadFix (MyMonad 𝔪) where
mfix f = fix (mx -> mx >>= f)
但是东西凝固了。是否有任何方法来修复我的代码(或方法论设计它正确的第一次),或者我应该写一些更直接的东西?
没有通用的方法使任意monad成为MonadFix
的实例。实际的代码取决于单子,甚至不可能对所有单子都适用。您可以查看各种单子来了解它是如何完成的。如果您的单子实际上是State
,应该已经有一个实例。