モナドトランスフォーマーを書くためにモナドの内部構造にアクセスする必要がありますか?
例: GetT
- Get
Data.Binary.Get からのモナド用トランスフォーマーが必要ですが、このモジュールはモナドの内部を公開しませんGet
。私にとって唯一の方法は、GetT
Data.Binary.Get モジュールに直接追加することでしょうか?
モナドトランスフォーマーを書くためにモナドの内部構造にアクセスする必要がありますか?
例: GetT
- Get
Data.Binary.Get からのモナド用トランスフォーマーが必要ですが、このモジュールはモナドの内部を公開しませんGet
。私にとって唯一の方法は、GetT
Data.Binary.Get モジュールに直接追加することでしょうか?
一般的に、はい。この例では、内側のモナド(ここではリストモナド)が外側のモナドの「以前の」アクションの効果を「元に戻す」ことができる方法を参照してください。
> execWriterT (tell "Hi" >> tell "Ho" >> lift [()])
["HiHo"]
> execWriterT (tell "Hi" >> tell "Ho" >> lift [])
[]
ここで、すべてのモナドをモナド変換子に変えることができると仮定します。次に、モナド変換子を構築できます。IOT
これにより、ミサイルが発射されますが、元に戻すことができます。
> execIOT (launchMissile >> lift [])
したがって、定義を見ずに任意のモナドをモナド変換子に変えることはできません。