Haskell 是否有镜头操作员将镜头和fmap合并

Haskell 是否有镜头操作员将镜头和fmap合并,haskell,haskell-lens,Haskell,Haskell Lens,我有以下代码 u & currentDay %~ fmap (addDays 1) currentDay返回一个Maybe,这就是我需要fmap的原因。 是否已经有一个操作符可以组合%~和fmap(如%~;-))或一个聪明的方法来实现这一点?没有现成的操作符,但您可以轻松定义自己的操作符: %$~ :: Functor f => ASetter s t (f a) (f b) -> (a -> b) -> s -> t l %$~ f = over a (

我有以下代码

u & currentDay %~ fmap (addDays 1)
currentDay
返回一个
Maybe
,这就是我需要
fmap
的原因。
是否已经有一个操作符可以组合
%~
fmap
(如
%~
;-))或一个聪明的方法来实现这一点?

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

%$~ :: Functor f => ASetter s t (f a) (f b) -> (a -> b) -> s -> t
l %$~ f = over a (fmap f)
执行此操作的标准方法是使用setter:

由于您在
上的映射可能
也可以使用prism:


u¤tDay%~(addDays 1)
怎么样?确实如此,但我更感兴趣的是知道镜头库中是否已经有操作员这样做了。有很多,有些很难掌握。你可以使用:
u¤tDay。第1天
@cchalmers有趣。但是镜头中没有(已经存在)组合
映射的
%~
?@mb14的运算符(设置组合符为)。但写自己的也不难。
u & currentDay . mapped %~ addDays 1
u & currentDay . _Just %~ addDays 1