Documentation

The 'MonadReader interface monad represents computations which can read
values from a shared environment, pass values from function to function
and execute sub-computations in a modified environment. Using the
MonadReader interface for such computations is often clearer and easier
than using the MonadState interface.