私が見つけたモナド変換子の問題の 1 つは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
。
この質問のタイトルは、順列について語っています。実際、モナド変換スタックの任意の順列をどのように処理できますか?