6
給定Writer
monad操作,我想通過在monad操作內寫入數據上映射函數來修改它。在Writer monad中更改寫入數據
喜歡的東西:
retell :: (w -> w') -> Writer w a -> Writer w' a
請問這樣的功能已經在圖書館存在?如果不是,如何定義?
給定Writer
monad操作,我想通過在monad操作內寫入數據上映射函數來修改它。在Writer monad中更改寫入數據
喜歡的東西:
retell :: (w -> w') -> Writer w a -> Writer w' a
請問這樣的功能已經在圖書館存在?如果不是,如何定義?
retell f = Writer . second f $ runWriter
還有一個由庫提供的mapWriter
函數。所以,你可以這樣做:
retell = mapWriter . second
的second
功能是Control.Arrow
,但你可以定義它自己這樣一個不太普通版本:
second f (a, b) = (a, f b)
你能做到這一點通過級聯'pass' MonadWriter類中的方法?如果沒有,我會做我自己的Writer的子類 - 'Rewriter',它提供了'retell'操作。 –
@stephentetley - 糾正自己,因爲你想打字改變作家monad的'w',你不能用'pass'來做這個。我會用'Rewriter'子類去擴展'Writer'和'retell'。 –