:: (a -> a) -> m a -> m a package:fused-effects

Run a computation with an environment value locally modified by the passed function.
runReader a (local f m) = runReader (f a) m
Run a computation, modifying its output with the passed function.
runWriter (censor f m) = fmap (first f) (runWriter m)