This is a version of (
.~) which modifies the structure and
returns it along with the old value:
>>> (1, 2) & _1 <<.~ 0
(1, (0, 2))
Simpler type signatures:
(<<.~) :: Lens s t a b -> b -> s -> (a, t)
(<<.~) :: Monoid a => Traversal s t a b -> b -> s -> (a, t)