モナドで結び目を結ぶのに十分な怠inessを回復する方法はありますか?
-
28-10-2019 - |
質問
私は滑らかなコードを書きたいです(そうでないことを実装する時間を節約します) 結び目を結ぶ. 。それは大まかにこのようになります、
n <- myinstr n x
理論的には、 myinstr
実行する必要があります x
値を取得するために、それはなります n
. myinstr
, 、内部で実行されます State
モナド、置きます n
州へ、しかしこれは影響しません x
の計算。
使ってみました DoRec
のナイーブな実装 mfix
,
instance Monad 𝔪 => MonadFix (MyMonad 𝔪) where
mfix f = fix (\mx -> mx >>= f)
しかし、物事は凍結します。私のコードを修正する方法(または初めて正しく設計するための方法論)を修正する方法はありますか、それとももっと簡単なものを書くべきですか?
解決
任意のモナドをのインスタンスにする一般的な方法はありません MonadFix
. 。 The actual code depends on the monad, and it's not even possible for all monads. You can look at the various monads to see how it's done. And if your monad is in fact State
すでにインスタンスがあるはずです。
所属していません StackOverflow