一つは、右のモナドにlift
操作に必要です。単一lift
ここと悪いありませんが、時にはこのように見えるの機能があります。入れ替えモナド変換スタック上の作業
fun = do
lift a
lift b
c
lift d
lift e
f
私はこのように、この関数を記述できるようにしたいと思います:
fun = monadInvert $ do
a
b
lift c
d
e
lift f
これは半分コード番号はlift
です。コードがきれいになります。
質問:どのモナドについてmonadInvert
が可能ですか?どのようにしてこの機能を作りますか?
ボーナスポイント:monad m
の場合はMonadIO
のインスタンスです。
この質問のタイトルは、順列について語っています。実際、モナドトランスフォーメータスタックの任意の順列にはどのように対処できますか?
私は非常にあなたがすることができます疑いが(しかし、おそらくいくつかの邪悪なトリッキーを使用することができます)。タイプについて考えてみると、私には分かりません。 –
シャベルレディソリューションではありませんが、[このペーパー](http://www.cs.umd.edu/~mwh/papers/monadic.pdf)の価値があります。 「私たちのアルゴリズムは、必要なバインド、ユニット、モナドからモナドへのモチーフを挿入して、プログラムのタイプが「 – acfoltzer