有镜头操作符结合 %~ 和 fmap

Is there a lens operator to combine %~ and fmap

我有以下代码

u & currentDay %~ fmap (addDays 1)

currentDay returns a Maybe 这就是为什么我需要 fmap。 是否已经有一个运算符来组合 %~fmap(如 %~<$> ;-))或一个聪明的方法?

没有现成的运算符,但您可以轻松定义自己的运算符:

%$~ :: Functor f => ASetter s t (f a) (f b) -> (a -> b) -> s -> t
l %$~ f = over a (fmap f)

执行此操作的标准方法是使用 mapped setter:

u & currentDay . mapped %~ addDays 1

因为你映射到 Maybe 你也可以使用 _Just 棱镜:

u & currentDay . _Just %~ addDays 1