に外モナドの更新:私は失敗し、いくつかのログをして、計算のためのモナドを持っている唯一のモナド変換
f2 :: Writer [String] b
:
f1 :: WriterT [String] (Either String) a
私はいくつかのログを失敗したがいません機能を持っています
f2のログを使ってf1のライターモナドを更新し、f2計算の出力をキャプチャする最良の方法は何ですか?現時点では私はこれをやっている:私は作家を中心に切り替え、どちらかのモナドは、問題を解決することはできません、別の計算で、内部モナドを更新するためにリフトを使用しています
f2result <- (\(r,l) -> do {tell l; return r}) (runWriter f2)
。
ありがとうdanrとホタルブクロ:コメントで
は、ホタルブクロはこの設定で機能を包むのバージョンを与えました。私はwrapメソッドを使用することを選択しました。私はf2の型を変更することができますが、その関数は他のコンテキストで表示されるので、特定の呼び出し関数の必要性を参照せずにその型を記述したいと思います。 – mskel