gat*_*ado 11 monads haskell monadfix tying-the-knot
我想写一个光滑的代码(通过打结来节省我很多时间来实现).它大致是这样的,
n <- myinstr n x
Run Code Online (Sandbox Code Playgroud)
在理论上,myinstr
应该运行x
以获得一个价值,这将成为n
.myinstr
在State
monad 中运行,将n
进入状态,但这不会影响x
计算.
我尝试过使用DoRec
和实现的mfix
,
instance Monad => MonadFix (MyMonad ) where
mfix f = fix (\mx -> mx >>= f)
Run Code Online (Sandbox Code Playgroud)
事情冻结了.有没有任何方法可以修复我的代码(或者第一次正确设计它的方法),还是应该写一些更直接的东西?
aug*_*tss 14
没有通用的方法可以将任意monad作为实例MonadFix
.实际的代码取决于monad,并且它甚至不可能适用于所有monad.您可以查看各种monad以了解它是如何完成的.如果你的monad实际上State
应该已经有了一个实例.