    -----------------------------------------------------------------------------
    -- |
    -- Module      :  Control.Monad.Trans
    -- Copyright   :  (c) Andy Gill 2001,
    --                (c) Oregon Graduate Institute of Science and Technology, 2001
    -- License     :  BSD-style (see the file LICENSE)
    --
    -- Maintainer  :  libraries@haskell.org
    -- Stability   :  experimental
    -- Portability :  portable
    --
    -- 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 @Identity@, @[]@ or 'IO', and
    -- applies a sequence of monad transformers.
    --
    -- Most monad transformer modules include the special case of applying the
    -- transformer to @Identity@.  For example, @State s@ is an abbreviation
    -- for @StateT s Identity@.
    --
    -- Each monad transformer also comes with an operation @run@/XXX/ to
    -- unwrap the transformer, exposing a computation of the inner monad.
    -----------------------------------------------------------------------------

    module Control.Monad.Trans (
        module Control.Monad.Trans.Class,
        module Control.Monad.IO.Class
      ) where

    import Control.Monad.IO.Class
    import Control.Monad.Trans.Class