l %%@= f ≡ state (l %%@~ f)
(%%@=) :: MonadState s m => IndexedLens i s s a b -> (i -> a -> (r, b)) -> s -> m r (%%@=) :: (MonadState s m, Monoid r) => IndexedTraversal i s s a b -> (i -> a -> (r, b)) -> s -> m r
>>> execState (do _1 %= f;_2 %= g) (a,b) (f a,g b)
>>> execState (do both %= f) (a,b) (f a,f b)
(%=) :: MonadState s m => Iso' s a -> (a -> a) -> m () (%=) :: MonadState s m => Lens' s a -> (a -> a) -> m () (%=) :: MonadState s m => Traversal' s a -> (a -> a) -> m () (%=) :: MonadState s m => Setter' s a -> (a -> a) -> m ()
(%=) :: MonadState s m => ASetter s s a b -> (a -> b) -> m ()
l %= f ≡ l %@= const f
(%@=) :: MonadState s m => IndexedSetter i s s a b -> (i -> a -> b) -> m () (%@=) :: MonadState s m => IndexedLens i s s a b -> (i -> a -> b) -> m () (%@=) :: MonadState s m => IndexedTraversal i s t a b -> (i -> a -> b) -> m ()
(%@~) ≡ ioverWhen you do not need access to the index then (%~) is more liberal in what it can accept.
l %~ f ≡ l %@~ const f
(%@~) :: IndexedSetter i s t a b -> (i -> a -> b) -> s -> t (%@~) :: IndexedLens i s t a b -> (i -> a -> b) -> s -> t (%@~) :: IndexedTraversal i s t a b -> (i -> a -> b) -> s -> t
fmap f ≡ mapped %~ f fmapDefault f ≡ traverse %~ f
>>> (a,b,c) & _3 %~ f (a,b,f c)
>>> (a,b) & both %~ f (f a,f b)
>>> _2 %~ length $ (1,"hello") (1,5)
>>> traverse %~ f $ [a,b,c] [f a,f b,f c]
>>> traverse %~ even $ [1,2,3] [False,True,False]
>>> traverse.traverse %~ length $ [["hello","world"],["!!!"]] [[5,5],[3]]
(%~) :: Setter s t a b -> (a -> b) -> s -> t (%~) :: Iso s t a b -> (a -> b) -> s -> t (%~) :: Lens s t a b -> (a -> b) -> s -> t (%~) :: Traversal s t a b -> (a -> b) -> s -> t
(<%=) :: MonadState s m => Lens' s a -> (a -> a) -> m a (<%=) :: MonadState s m => Iso' s a -> (a -> a) -> m a (<%=) :: (MonadState s m, Monoid a) => Traversal' s a -> (a -> a) -> m a
(<%@=) :: MonadState s m => IndexedLens i s s a b -> (i -> a -> b) -> m b (<%@=) :: (MonadState s m, Monoid b) => IndexedTraversal i s s a b -> (i -> a -> b) -> m b
l <%~ f ≡ l <%@~ const fWhen you do not need access to the index then (<%~) is more liberal in what it can accept. If you do not need the intermediate result, you can use (%@~) or even (%~).
(<%@~) :: IndexedLens i s t a b -> (i -> a -> b) -> s -> (b, t) (<%@~) :: Monoid b => IndexedTraversal i s t a b -> (i -> a -> b) -> s -> (b, t)
(<<%=) :: MonadState s m => Lens' s a -> (a -> a) -> m a (<<%=) :: MonadState s m => Iso' s a -> (a -> a) -> m a (<<%=) :: (MonadState s m, Monoid a) => Traversal' s a -> (a -> a) -> m a
(<<%=) :: MonadState s m => LensLike ((,)a) s s a b -> (a -> b) -> m a
(<<%@=) :: MonadState s m => IndexedLens i s s a b -> (i -> a -> b) -> m a (<<%@=) :: (MonadState s m, Monoid b) => IndexedTraversal i s s a b -> (i -> a -> b) -> m a
(<<%@~) :: IndexedLens i s t a b -> (i -> a -> b) -> s -> (a, t) (<<%@~) :: Monoid a => IndexedTraversal i s t a b -> (i -> a -> b) -> s -> (a, t)