(f . g) x = f (g x)
f . id = f = id . f
>>> map ((*2) . length) [[], [0, 1, 2], [0]] [0,6,2]
>>> foldr (.) id [(+1), (*3), (^3)] 2 25
>>> let (...) = (.).(.) in ((*2)...(+)) 5 10 30
(f . g) x = f $! g $! xInternally used since version 0.10.0.0. Moved to Data.Function.Between.Strict.Internal module and exposed in version 0.11.0.0.
>>> let nestedMap = (fmap Map.fromList . Map.fromList) [(1, [(10, "one,ten"), (20, "one,twenty")]), (2, [(30, "two,thirty"), (40,"two,forty")])] >>> nestedMap^..(itraversed.>itraversed).withIndex [(10,"one,ten"),(20,"one,twenty"),(30,"two,thirty"),(40,"two,forty")]
>>> execState (do _1 .= c; _2 .= d) (a,b) (c,d)
>>> execState (both .= c) (a,b) (c,c)
(.=) :: MonadState s m => Iso' s a -> a -> m () (.=) :: MonadState s m => Lens' s a -> a -> m () (.=) :: MonadState s m => Traversal' s a -> a -> m () (.=) :: MonadState s m => Setter' s a -> a -> m ()It puts the state in the monad or it gets the hose again.
l .= b ≡ l .@= const b
(.@=) :: MonadState s m => IndexedSetter i s s a b -> (i -> b) -> m () (.@=) :: MonadState s m => IndexedLens i s s a b -> (i -> b) -> m () (.@=) :: MonadState s m => IndexedTraversal i s t a b -> (i -> b) -> m ()
(.@~) ≡ isetWhen you do not need access to the index then (.~) is more liberal in what it can accept.
l .~ b ≡ l .@~ const b
(.@~) :: IndexedSetter i s t a b -> (i -> b) -> s -> t (.@~) :: IndexedLens i s t a b -> (i -> b) -> s -> t (.@~) :: IndexedTraversal i s t a b -> (i -> b) -> s -> t
f <$ a ≡ mapped .~ f $ a
>>> (a,b,c,d) & _4 .~ e (a,b,c,e)
>>> (42,"world") & _1 .~ "hello" ("hello","world")
>>> (a,b) & both .~ c (c,c)
(.~) :: Setter s t a b -> b -> s -> t (.~) :: Iso s t a b -> b -> s -> t (.~) :: Lens s t a b -> b -> s -> t (.~) :: Traversal s t a b -> b -> s -> t