Classes for monad transformers.
A monad transformer makes new monad out of an existing monad, such
that computations of the old monad may be embedded in the new one.
To construct a monad with a desired set of features, one typically
starts with a base monad, such as
applies a sequence of monad transformers.
Most monad transformer modules include the special case of applying the
Identity. For example,
State s is an abbreviation
StateT s Identity.
Each monad transformer also comes with an operation
unwrap the transformer, exposing a computation of the inner monad.