モナドで結び目を結ぶのに十分な怠inessを回復する方法はありますか?

StackOverflow https://stackoverflow.com/questions/8379824

質問

私は滑らかなコードを書きたいです(そうでないことを実装する時間を節約します) 結び目を結ぶ. 。それは大まかにこのようになります、

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 すでにインスタンスがあるはずです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top