    -----------------------------------------------------------------------------
    -- |
    -- Module      :  Control.Monad.RWS.Class
    -- Copyright   :  (c) Andy Gill 2001,
    --                (c) Oregon Graduate Institute of Science and Technology, 2001
    -- License     :  BSD-style (see the file libraries/base/LICENSE)
    --
    -- Maintainer  :  libraries@haskell.org
    -- Stability   :  experimental
    -- Portability :  non-portable (multi-param classes, functional dependencies)
    --
    -- Declaration of the MonadRWS class.
    --
    --      Inspired by the paper
    --      /Functional Programming with Overloading and
    --          Higher-Order Polymorphism/,
    --        Mark P Jones (<http://www.cse.ogi.edu/~mpj/>)
    --          Advanced School of Functional Programming, 1995.
    -----------------------------------------------------------------------------

    module Control.Monad.RWS.Class (
        MonadRWS,
        module Control.Monad.Reader.Class,
        module Control.Monad.State.Class,
        module Control.Monad.Writer.Class,
      ) where

    import Control.Monad.Reader.Class
    import Control.Monad.State.Class
    import Control.Monad.Writer.Class
    import Data.Monoid

    class (Monoid w, MonadReader r m, MonadWriter w m, MonadState s m)
       => MonadRWS r w s m | m -> r, m -> w, m -> s