在Writer monad中更改写入的数据

时间:2012-05-17 18:43:15

标签: haskell monads

给定Writer monad动作,我想通过将函数映射到monad动作中的书面数据来修改它。

类似的东西:

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

库中是否已存在此类功能?如果没有,怎么定义?

1 个答案:

答案 0 :(得分:11)

retell f = Writer . second f $ runWriter 

图书馆还提供mapWriter功能。所以你可以这样做:

retell = mapWriter . second

second函数位于Control.Arrow,但你可以自己定义一个不那么通用的版本:

second f (a, b) = (a, f b)