11

結び目を結ぶことで、洗練されたコードを書きたいと思います(そうでなければ実装する時間を大幅に節約できます)。ざっくりこんな感じで、

n <- myinstr n x

理論的には、myinstrを実行xして値を取得する必要があり、これは になりnます。モナドmyinstr内で実行される は状態に入りますが、これはの計算には影響しません。Statenx

DoRecの単純な実装を使用してみましたがmfix

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

しかし、物事は凍結します。コードを修正する方法 (または最初から正しく設計するための方法論) はありますか?

4

1 に答える 1

14

任意のモナドを のインスタンスにする一般的な方法はありませんMonadFix。実際のコードはモナドに依存し、すべてのモナドで可能というわけではありません。さまざまなモナドを見て、それがどのように行われるかを確認できます。モナドが実際Stateに存在する場合、すでにインスタンスが存在するはずです。

于 2011-12-05T03:21:42.307 に答える