6

モナド アクションが与えられた場合、Writerモナド アクション内に書き込まれたデータに関数をマッピングすることで、モナド アクションを変更したいと考えています。

何かのようなもの:

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

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

4

1 に答える 1

11
retell f = Writer . second f $ runWriter 

mapWriterライブラリが提供する機能もあります。だからあなたはこれを行うことができます:

retell = mapWriter . second

second関数は にありますが、次のControl.Arrowように一般的ではないバージョンを自分で定義できます。

second f (a, b) = (a, f b)
于 2012-05-17T18:48:05.500 に答える