Monad package:relude
Reexporting useful monadic stuff.
The 
Monad class defines the basic operations over a
monad, a concept from a branch of mathematics known as
category theory. From the perspective of a Haskell programmer,
however, it is best to think of a monad as an 
abstract datatype
of actions. Haskell's 
do expressions provide a convenient
syntax for writing monadic expressions.
Instances of 
Monad should satisfy the following:
Furthermore, the 
Monad and 
Applicative operations should
relate as follows:
The above laws imply:
and that 
pure and (
<*>) satisfy the applicative
functor laws.
The instances of 
Monad for lists, 
Maybe and 
IO
defined in the 
Prelude satisfy these laws.
Monads in which 
IO computations may be embedded. Any monad
built by applying a sequence of monad transformers to the 
IO
monad will be an instance of this class.
Instances should satisfy the following laws, which state that
liftIO is a transformer of monads:
Monads that also support choice and failure.
See examples in 
Control.Monad.Reader. Note, the partially
applied function type 
(->) r is a simple reader monad. See
the 
instance declaration below.
Minimal definition is either both of get and put or
just state