のように機能するレンズ関数が必要でしたover
が、モナド演算を使用します。
overM :: (Monad m) => Lens s t a b -> (a -> m b) -> (s -> m t)
この関数は簡単に定義できますが (実際には単なる恒等法です)、そのような関数はlensWrappedMonad
のどこかに定義されているのでしょうか?
{-# LANGUAGE RankNTypes #-}
import Control.Applicative
import Control.Lens
overF :: (Functor f) => Lens s t a b -> (a -> f b) -> (s -> f t)
overF l = l
overM :: (Monad m) => Lens s t a b -> (a -> m b) -> (s -> m t)
overM l = (unwrapMonad .) . l . (WrapMonad .)