2012-05-17 7 views
6

モナドのアクションが与えられているので、モナドのアクション内に書き込まれたデータに関数をマッピングすることで、モディファイドのアクションを変更したいと思います。以下のようなWriterのモナドで書き込まれたデータを変更する

何か:

retell :: (w -> w') -> Writer w a -> Writer w' a 

は、このような機能は、既にライブラリに存在していますか?そうでない場合、どのように定義できますか?

+0

あなたがこれを行うことができます:

retell = mapWriter . second 

second機能がControl.Arrowであるが、あなたはこのようなことを自分の少ない一般的なバージョンを定義することができます。だから、これを行うことができますMonadWriterクラスのメソッド?そうでなければ、私はWriterの独自のサブクラスを作っていました - 'Rewriter'は' retell'オペレーションを提供します。 –

+0

@stephentetley - 自分自身を修正します。あなたが 'pass 'でこれを行うことはできません。私は 'retell'で' Writer'を拡張する 'Rewriter'サブクラスに行きます。 –

答えて

11

また、ライブラリによって提供される機能もあります。 `pass`を連結すること

second f (a, b) = (a, f b) 
関連する問題