This class allows us to use magnify part of the environment, changing the environment supplied by
many different Monad transformers. Unlike zoom this can change the environment of a deeply nested Monad transformer.
Also, unlike zoom, this can be used with any valid Getter, but cannot be used with a Traversal or Fold.
This class allows us to use zoom in, changing the State supplied by
many different Monad transformers, potentially quite
deep in a Monad transformer stack.
Run a monadic action in a larger State than it was defined in,
using a Lens' or Control.Lens.Traversal.Traversal'.
This is commonly used to lift actions in a simpler StateMonad into a StateMonad with a larger State type.
When applied to a Control.Lens.Traversal.Traversal' over
multiple values, the actions for each target are executed sequentially
and the results are aggregated.
This can be used to edit pretty much any Monad transformer stack with a State in it!
Example1 expression
>>> flip State.evalState (a,b) $ zoom _1 $ use ida