10

モナドトランスフォーマーを書くためにモナドの内部構造にアクセスする必要がありますか?

例: GetT- GetData.Binary.Get からのモナド用トランスフォーマーが必要ですが、このモジュールはモナドの内部を公開しませんGet。私にとって唯一の方法は、GetTData.Binary.Get モジュールに直接追加することでしょうか?

4

1 に答える 1

11

一般的に、はい。この例では、内側のモナド(ここではリストモナド)が外側のモナドの「以前の」アクションの効果を「元に戻す」ことができる方法を参照してください。

> execWriterT (tell "Hi" >> tell "Ho" >> lift [()])
["HiHo"]
> execWriterT (tell "Hi" >> tell "Ho" >> lift [])
[]

ここで、すべてのモナドをモナド変換子に変えることができると仮定します。次に、モナド変換子を構築できます。IOTこれにより、ミサイルが発射されますが、元に戻すことができます。

> execIOT (launchMissile >> lift [])

したがって、定義を見ずに任意のモナドをモナド変換子に変えることはできません。

于 2012-08-03T11:01:43.820 に答える