我需要一个像over
一样工作,但具有单子操作的透镜函数:
overM :: (Monad m) => Lens s t a b -> (a -> m b) -> (s -> m t)
虽然这个函数很容易定义(实际上只是一个模 WrappedMonad
的身份标识),但我想知道是否在 lens 中已经定义了这样的函数?
{-# 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 .)
traverseOf
只是id
,它不能解决AMP问题。你需要有你的WrappedMonad
-fixed lens才能利用traverseOf
。 - J. AbrahamsonmapMOf
定义。 - Charles Durham