    {-# LANGUAGE FlexibleContexts           #-}
    {-# LANGUAGE FlexibleInstances          #-}
    {-# LANGUAGE GeneralizedNewtypeDeriving #-}
    {-# LANGUAGE KindSignatures             #-}
    {-# LANGUAGE MultiParamTypeClasses      #-}
    {-# LANGUAGE UndecidableInstances       #-}
    {-# LANGUAGE DeriveTraversable          #-}
    {-# LANGUAGE CPP                        #-}
    {-# LANGUAGE Trustworthy                #-}

    #if __GLASGOW_HASKELL__ >= 806
    {-# LANGUAGE QuantifiedConstraints #-}
    #endif

    {-| Composition of monad transformers. A higher-order version of
        "Data.Functor.Compose".
    -}

    module Control.Monad.Trans.Compose (
        -- * ComposeT
        ComposeT(ComposeT, getComposeT),
        mapComposeT
       ) where

    import Control.Applicative (
        Applicative(pure, (<*>), (*>), (<*)), Alternative(empty, (<|>)) )
    import Control.Monad (MonadPlus(mzero, mplus), liftM)
    import Control.Monad.Cont.Class (MonadCont(callCC))
    import Control.Monad.Error.Class (MonadError(throwError, catchError))
    import Control.Monad.Fail (MonadFail(..))
    import Control.Monad.Morph (MFunctor(hoist))
    import Control.Monad.RWS.Class (MonadRWS)
    import Control.Monad.Reader.Class (MonadReader(ask, local, reader))
    import Control.Monad.State.Class (MonadState(get, put, state))
    import Control.Monad.Trans.Class (MonadTrans(lift))
    import Control.Monad.Writer.Class (MonadWriter(writer, tell, listen, pass))
    import Control.Monad.IO.Class (MonadIO(liftIO))
    import Data.Foldable (Foldable(fold, foldMap, foldr, foldl, foldr1, foldl1))
    import Data.Traversable (Traversable(traverse, sequenceA, mapM, sequence))
    import Prelude hiding (foldr, foldl, foldr1, foldl1, mapM, sequence)

    infixr 9 `ComposeT`

    -- | Composition of monad transformers.
    newtype ComposeT (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *) m a
        = ComposeT { forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    ComposeT f g m a -> f (g m) a
    getComposeT :: f (g m) a }
        deriving
        ( Applicative (ComposeT f g m)
    Applicative (ComposeT f g m)
    -> (forall a. ComposeT f g m a)
    -> (forall a.
        ComposeT f g m a -> ComposeT f g m a -> ComposeT f g m a)
    -> (forall a. ComposeT f g m a -> ComposeT f g m [a])
    -> (forall a. ComposeT f g m a -> ComposeT f g m [a])
    -> Alternative (ComposeT f g m)
    forall a. ComposeT f g m a
    forall a. ComposeT f g m a -> ComposeT f g m [a]
    forall a. ComposeT f g m a -> ComposeT f g m a -> ComposeT f g m a
    forall (f :: * -> *).
    Applicative f
    -> (forall a. f a)
    -> (forall a. f a -> f a -> f a)
    -> (forall a. f a -> f [a])
    -> (forall a. f a -> f [a])
    -> Alternative f
    forall {f :: (* -> *) -> * -> *} {g :: (* -> *) -> * -> *}
           {m :: * -> *}.
    Alternative (f (g m)) =>
    Applicative (ComposeT f g m)
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Alternative (f (g m)) =>
    ComposeT f g m a
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Alternative (f (g m)) =>
    ComposeT f g m a -> ComposeT f g m [a]
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Alternative (f (g m)) =>
    ComposeT f g m a -> ComposeT f g m a -> ComposeT f g m a
    $cempty :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Alternative (f (g m)) =>
    ComposeT f g m a
    empty :: forall a. ComposeT f g m a
    $c<|> :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Alternative (f (g m)) =>
    ComposeT f g m a -> ComposeT f g m a -> ComposeT f g m a
    <|> :: forall a. ComposeT f g m a -> ComposeT f g m a -> ComposeT f g m a
    $csome :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Alternative (f (g m)) =>
    ComposeT f g m a -> ComposeT f g m [a]
    some :: forall a. ComposeT f g m a -> ComposeT f g m [a]
    $cmany :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Alternative (f (g m)) =>
    ComposeT f g m a -> ComposeT f g m [a]
    many :: forall a. ComposeT f g m a -> ComposeT f g m [a]
    Alternative
        , Functor (ComposeT f g m)
    Functor (ComposeT f g m)
    -> (forall a. a -> ComposeT f g m a)
    -> (forall a b.
        ComposeT f g m (a -> b) -> ComposeT f g m a -> ComposeT f g m b)
    -> (forall a b c.
        (a -> b -> c)
        -> ComposeT f g m a -> ComposeT f g m b -> ComposeT f g m c)
    -> (forall a b.
        ComposeT f g m a -> ComposeT f g m b -> ComposeT f g m b)
    -> (forall a b.
        ComposeT f g m a -> ComposeT f g m b -> ComposeT f g m a)
    -> Applicative (ComposeT f g m)
    forall a. a -> ComposeT f g m a
    forall a b.
    ComposeT f g m a -> ComposeT f g m b -> ComposeT f g m a
    forall a b.
    ComposeT f g m a -> ComposeT f g m b -> ComposeT f g m b
    forall a b.
    ComposeT f g m (a -> b) -> ComposeT f g m a -> ComposeT f g m b
    forall a b c.
    (a -> b -> c)
    -> ComposeT f g m a -> ComposeT f g m b -> ComposeT f g m c
    forall (f :: * -> *).
    Functor f
    -> (forall a. a -> f a)
    -> (forall a b. f (a -> b) -> f a -> f b)
    -> (forall a b c. (a -> b -> c) -> f a -> f b -> f c)
    -> (forall a b. f a -> f b -> f b)
    -> (forall a b. f a -> f b -> f a)
    -> Applicative f
    forall {f :: (* -> *) -> * -> *} {g :: (* -> *) -> * -> *}
           {m :: * -> *}.
    Applicative (f (g m)) =>
    Functor (ComposeT f g m)
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Applicative (f (g m)) =>
    a -> ComposeT f g m a
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a b.
    Applicative (f (g m)) =>
    ComposeT f g m a -> ComposeT f g m b -> ComposeT f g m a
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a b.
    Applicative (f (g m)) =>
    ComposeT f g m a -> ComposeT f g m b -> ComposeT f g m b
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a b.
    Applicative (f (g m)) =>
    ComposeT f g m (a -> b) -> ComposeT f g m a -> ComposeT f g m b
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a b c.
    Applicative (f (g m)) =>
    (a -> b -> c)
    -> ComposeT f g m a -> ComposeT f g m b -> ComposeT f g m c
    $cpure :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Applicative (f (g m)) =>
    a -> ComposeT f g m a
    pure :: forall a. a -> ComposeT f g m a
    $c<*> :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a b.
    Applicative (f (g m)) =>
    ComposeT f g m (a -> b) -> ComposeT f g m a -> ComposeT f g m b
    <*> :: forall a b.
    ComposeT f g m (a -> b) -> ComposeT f g m a -> ComposeT f g m b
    $cliftA2 :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a b c.
    Applicative (f (g m)) =>
    (a -> b -> c)
    -> ComposeT f g m a -> ComposeT f g m b -> ComposeT f g m c
    liftA2 :: forall a b c.
    (a -> b -> c)
    -> ComposeT f g m a -> ComposeT f g m b -> ComposeT f g m c
    $c*> :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a b.
    Applicative (f (g m)) =>
    ComposeT f g m a -> ComposeT f g m b -> ComposeT f g m b
    *> :: forall a b.
    ComposeT f g m a -> ComposeT f g m b -> ComposeT f g m b
    $c<* :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a b.
    Applicative (f (g m)) =>
    ComposeT f g m a -> ComposeT f g m b -> ComposeT f g m a
    <* :: forall a b.
    ComposeT f g m a -> ComposeT f g m b -> ComposeT f g m a
    Applicative
        , ComposeT f g m a -> ComposeT f g m a -> Bool
    (ComposeT f g m a -> ComposeT f g m a -> Bool)
    -> (ComposeT f g m a -> ComposeT f g m a -> Bool)
    -> Eq (ComposeT f g m a)
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Eq (f (g m) a) =>
    ComposeT f g m a -> ComposeT f g m a -> Bool
    $c== :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Eq (f (g m) a) =>
    ComposeT f g m a -> ComposeT f g m a -> Bool
    == :: ComposeT f g m a -> ComposeT f g m a -> Bool
    $c/= :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Eq (f (g m) a) =>
    ComposeT f g m a -> ComposeT f g m a -> Bool
    /= :: ComposeT f g m a -> ComposeT f g m a -> Bool
    Eq
        , (forall m. Monoid m => ComposeT f g m m -> m)
    -> (forall m a. Monoid m => (a -> m) -> ComposeT f g m a -> m)
    -> (forall m a. Monoid m => (a -> m) -> ComposeT f g m a -> m)
    -> (forall a b. (a -> b -> b) -> b -> ComposeT f g m a -> b)
    -> (forall a b. (a -> b -> b) -> b -> ComposeT f g m a -> b)
    -> (forall b a. (b -> a -> b) -> b -> ComposeT f g m a -> b)
    -> (forall b a. (b -> a -> b) -> b -> ComposeT f g m a -> b)
    -> (forall a. (a -> a -> a) -> ComposeT f g m a -> a)
    -> (forall a. (a -> a -> a) -> ComposeT f g m a -> a)
    -> (forall a. ComposeT f g m a -> [a])
    -> (forall a. ComposeT f g m a -> Bool)
    -> (forall a. ComposeT f g m a -> Int)
    -> (forall a. Eq a => a -> ComposeT f g m a -> Bool)
    -> (forall a. Ord a => ComposeT f g m a -> a)
    -> (forall a. Ord a => ComposeT f g m a -> a)
    -> (forall a. Num a => ComposeT f g m a -> a)
    -> (forall a. Num a => ComposeT f g m a -> a)
    -> Foldable (ComposeT f g m)
    forall a. Eq a => a -> ComposeT f g m a -> Bool
    forall a. Num a => ComposeT f g m a -> a
    forall a. Ord a => ComposeT f g m a -> a
    forall m. Monoid m => ComposeT f g m m -> m
    forall a. ComposeT f g m a -> Bool
    forall a. ComposeT f g m a -> Int
    forall a. ComposeT f g m a -> [a]
    forall a. (a -> a -> a) -> ComposeT f g m a -> a
    forall m a. Monoid m => (a -> m) -> ComposeT f g m a -> m
    forall b a. (b -> a -> b) -> b -> ComposeT f g m a -> b
    forall a b. (a -> b -> b) -> b -> ComposeT f g m a -> b
    forall (t :: * -> *).
    (forall m. Monoid m => t m -> m)
    -> (forall m a. Monoid m => (a -> m) -> t a -> m)
    -> (forall m a. Monoid m => (a -> m) -> t a -> m)
    -> (forall a b. (a -> b -> b) -> b -> t a -> b)
    -> (forall a b. (a -> b -> b) -> b -> t a -> b)
    -> (forall b a. (b -> a -> b) -> b -> t a -> b)
    -> (forall b a. (b -> a -> b) -> b -> t a -> b)
    -> (forall a. (a -> a -> a) -> t a -> a)
    -> (forall a. (a -> a -> a) -> t a -> a)
    -> (forall a. t a -> [a])
    -> (forall a. t a -> Bool)
    -> (forall a. t a -> Int)
    -> (forall a. Eq a => a -> t a -> Bool)
    -> (forall a. Ord a => t a -> a)
    -> (forall a. Ord a => t a -> a)
    -> (forall a. Num a => t a -> a)
    -> (forall a. Num a => t a -> a)
    -> Foldable t
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    (Foldable (f (g m)), Eq a) =>
    a -> ComposeT f g m a -> Bool
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    (Foldable (f (g m)), Num a) =>
    ComposeT f g m a -> a
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    (Foldable (f (g m)), Ord a) =>
    ComposeT f g m a -> a
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) m.
    (Foldable (f (g m)), Monoid m) =>
    ComposeT f g m m -> m
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Foldable (f (g m)) =>
    ComposeT f g m a -> Bool
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Foldable (f (g m)) =>
    ComposeT f g m a -> Int
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Foldable (f (g m)) =>
    ComposeT f g m a -> [a]
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Foldable (f (g m)) =>
    (a -> a -> a) -> ComposeT f g m a -> a
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) m a.
    (Foldable (f (g m)), Monoid m) =>
    (a -> m) -> ComposeT f g m a -> m
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) b a.
    Foldable (f (g m)) =>
    (b -> a -> b) -> b -> ComposeT f g m a -> b
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a b.
    Foldable (f (g m)) =>
    (a -> b -> b) -> b -> ComposeT f g m a -> b
    $cfold :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) m.
    (Foldable (f (g m)), Monoid m) =>
    ComposeT f g m m -> m
    fold :: forall m. Monoid m => ComposeT f g m m -> m
    $cfoldMap :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) m a.
    (Foldable (f (g m)), Monoid m) =>
    (a -> m) -> ComposeT f g m a -> m
    foldMap :: forall m a. Monoid m => (a -> m) -> ComposeT f g m a -> m
    $cfoldMap' :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) m a.
    (Foldable (f (g m)), Monoid m) =>
    (a -> m) -> ComposeT f g m a -> m
    foldMap' :: forall m a. Monoid m => (a -> m) -> ComposeT f g m a -> m
    $cfoldr :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a b.
    Foldable (f (g m)) =>
    (a -> b -> b) -> b -> ComposeT f g m a -> b
    foldr :: forall a b. (a -> b -> b) -> b -> ComposeT f g m a -> b
    $cfoldr' :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a b.
    Foldable (f (g m)) =>
    (a -> b -> b) -> b -> ComposeT f g m a -> b
    foldr' :: forall a b. (a -> b -> b) -> b -> ComposeT f g m a -> b
    $cfoldl :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) b a.
    Foldable (f (g m)) =>
    (b -> a -> b) -> b -> ComposeT f g m a -> b
    foldl :: forall b a. (b -> a -> b) -> b -> ComposeT f g m a -> b
    $cfoldl' :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) b a.
    Foldable (f (g m)) =>
    (b -> a -> b) -> b -> ComposeT f g m a -> b
    foldl' :: forall b a. (b -> a -> b) -> b -> ComposeT f g m a -> b
    $cfoldr1 :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Foldable (f (g m)) =>
    (a -> a -> a) -> ComposeT f g m a -> a
    foldr1 :: forall a. (a -> a -> a) -> ComposeT f g m a -> a
    $cfoldl1 :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Foldable (f (g m)) =>
    (a -> a -> a) -> ComposeT f g m a -> a
    foldl1 :: forall a. (a -> a -> a) -> ComposeT f g m a -> a
    $ctoList :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Foldable (f (g m)) =>
    ComposeT f g m a -> [a]
    toList :: forall a. ComposeT f g m a -> [a]
    $cnull :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Foldable (f (g m)) =>
    ComposeT f g m a -> Bool
    null :: forall a. ComposeT f g m a -> Bool
    $clength :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Foldable (f (g m)) =>
    ComposeT f g m a -> Int
    length :: forall a. ComposeT f g m a -> Int
    $celem :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    (Foldable (f (g m)), Eq a) =>
    a -> ComposeT f g m a -> Bool
    elem :: forall a. Eq a => a -> ComposeT f g m a -> Bool
    $cmaximum :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    (Foldable (f (g m)), Ord a) =>
    ComposeT f g m a -> a
    maximum :: forall a. Ord a => ComposeT f g m a -> a
    $cminimum :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    (Foldable (f (g m)), Ord a) =>
    ComposeT f g m a -> a
    minimum :: forall a. Ord a => ComposeT f g m a -> a
    $csum :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    (Foldable (f (g m)), Num a) =>
    ComposeT f g m a -> a
    sum :: forall a. Num a => ComposeT f g m a -> a
    $cproduct :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    (Foldable (f (g m)), Num a) =>
    ComposeT f g m a -> a
    product :: forall a. Num a => ComposeT f g m a -> a
    Foldable
        , (forall a b. (a -> b) -> ComposeT f g m a -> ComposeT f g m b)
    -> (forall a b. a -> ComposeT f g m b -> ComposeT f g m a)
    -> Functor (ComposeT f g m)
    forall a b. a -> ComposeT f g m b -> ComposeT f g m a
    forall a b. (a -> b) -> ComposeT f g m a -> ComposeT f g m b
    forall (f :: * -> *).
    (forall a b. (a -> b) -> f a -> f b)
    -> (forall a b. a -> f b -> f a) -> Functor f
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a b.
    Functor (f (g m)) =>
    a -> ComposeT f g m b -> ComposeT f g m a
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a b.
    Functor (f (g m)) =>
    (a -> b) -> ComposeT f g m a -> ComposeT f g m b
    $cfmap :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a b.
    Functor (f (g m)) =>
    (a -> b) -> ComposeT f g m a -> ComposeT f g m b
    fmap :: forall a b. (a -> b) -> ComposeT f g m a -> ComposeT f g m b
    $c<$ :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a b.
    Functor (f (g m)) =>
    a -> ComposeT f g m b -> ComposeT f g m a
    <$ :: forall a b. a -> ComposeT f g m b -> ComposeT f g m a
    Functor
        , Eq (ComposeT f g m a)
    Eq (ComposeT f g m a)
    -> (ComposeT f g m a -> ComposeT f g m a -> Ordering)
    -> (ComposeT f g m a -> ComposeT f g m a -> Bool)
    -> (ComposeT f g m a -> ComposeT f g m a -> Bool)
    -> (ComposeT f g m a -> ComposeT f g m a -> Bool)
    -> (ComposeT f g m a -> ComposeT f g m a -> Bool)
    -> (ComposeT f g m a -> ComposeT f g m a -> ComposeT f g m a)
    -> (ComposeT f g m a -> ComposeT f g m a -> ComposeT f g m a)
    -> Ord (ComposeT f g m a)
    ComposeT f g m a -> ComposeT f g m a -> Bool
    ComposeT f g m a -> ComposeT f g m a -> Ordering
    ComposeT f g m a -> ComposeT f g m a -> ComposeT f g m a
    forall a.
    Eq a
    -> (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    forall {f :: (* -> *) -> * -> *} {g :: (* -> *) -> * -> *}
           {m :: * -> *} {a}.
    Ord (f (g m) a) =>
    Eq (ComposeT f g m a)
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Ord (f (g m) a) =>
    ComposeT f g m a -> ComposeT f g m a -> Bool
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Ord (f (g m) a) =>
    ComposeT f g m a -> ComposeT f g m a -> Ordering
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Ord (f (g m) a) =>
    ComposeT f g m a -> ComposeT f g m a -> ComposeT f g m a
    $ccompare :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Ord (f (g m) a) =>
    ComposeT f g m a -> ComposeT f g m a -> Ordering
    compare :: ComposeT f g m a -> ComposeT f g m a -> Ordering
    $c< :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Ord (f (g m) a) =>
    ComposeT f g m a -> ComposeT f g m a -> Bool
    < :: ComposeT f g m a -> ComposeT f g m a -> Bool
    $c<= :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Ord (f (g m) a) =>
    ComposeT f g m a -> ComposeT f g m a -> Bool
    <= :: ComposeT f g m a -> ComposeT f g m a -> Bool
    $c> :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Ord (f (g m) a) =>
    ComposeT f g m a -> ComposeT f g m a -> Bool
    > :: ComposeT f g m a -> ComposeT f g m a -> Bool
    $c>= :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Ord (f (g m) a) =>
    ComposeT f g m a -> ComposeT f g m a -> Bool
    >= :: ComposeT f g m a -> ComposeT f g m a -> Bool
    $cmax :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Ord (f (g m) a) =>
    ComposeT f g m a -> ComposeT f g m a -> ComposeT f g m a
    max :: ComposeT f g m a -> ComposeT f g m a -> ComposeT f g m a
    $cmin :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Ord (f (g m) a) =>
    ComposeT f g m a -> ComposeT f g m a -> ComposeT f g m a
    min :: ComposeT f g m a -> ComposeT f g m a -> ComposeT f g m a
    Ord
        , ReadPrec [ComposeT f g m a]
    ReadPrec (ComposeT f g m a)
    Int -> ReadS (ComposeT f g m a)
    ReadS [ComposeT f g m a]
    (Int -> ReadS (ComposeT f g m a))
    -> ReadS [ComposeT f g m a]
    -> ReadPrec (ComposeT f g m a)
    -> ReadPrec [ComposeT f g m a]
    -> Read (ComposeT f g m a)
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Read (f (g m) a) =>
    ReadPrec [ComposeT f g m a]
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Read (f (g m) a) =>
    ReadPrec (ComposeT f g m a)
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Read (f (g m) a) =>
    Int -> ReadS (ComposeT f g m a)
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Read (f (g m) a) =>
    ReadS [ComposeT f g m a]
    $creadsPrec :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Read (f (g m) a) =>
    Int -> ReadS (ComposeT f g m a)
    readsPrec :: Int -> ReadS (ComposeT f g m a)
    $creadList :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Read (f (g m) a) =>
    ReadS [ComposeT f g m a]
    readList :: ReadS [ComposeT f g m a]
    $creadPrec :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Read (f (g m) a) =>
    ReadPrec (ComposeT f g m a)
    readPrec :: ReadPrec (ComposeT f g m a)
    $creadListPrec :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Read (f (g m) a) =>
    ReadPrec [ComposeT f g m a]
    readListPrec :: ReadPrec [ComposeT f g m a]
    Read
        , Int -> ComposeT f g m a -> ShowS
    [ComposeT f g m a] -> ShowS
    ComposeT f g m a -> String
    (Int -> ComposeT f g m a -> ShowS)
    -> (ComposeT f g m a -> String)
    -> ([ComposeT f g m a] -> ShowS)
    -> Show (ComposeT f g m a)
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Show (f (g m) a) =>
    Int -> ComposeT f g m a -> ShowS
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Show (f (g m) a) =>
    [ComposeT f g m a] -> ShowS
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Show (f (g m) a) =>
    ComposeT f g m a -> String
    $cshowsPrec :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Show (f (g m) a) =>
    Int -> ComposeT f g m a -> ShowS
    showsPrec :: Int -> ComposeT f g m a -> ShowS
    $cshow :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Show (f (g m) a) =>
    ComposeT f g m a -> String
    show :: ComposeT f g m a -> String
    $cshowList :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Show (f (g m) a) =>
    [ComposeT f g m a] -> ShowS
    showList :: [ComposeT f g m a] -> ShowS
    Show
        , Functor (ComposeT f g m)
    Foldable (ComposeT f g m)
    Functor (ComposeT f g m)
    -> Foldable (ComposeT f g m)
    -> (forall (f :: * -> *) a b.
        Applicative f =>
        (a -> f b) -> ComposeT f g m a -> f (ComposeT f g m b))
    -> (forall (f :: * -> *) a.
        Applicative f =>
        ComposeT f g m (f a) -> f (ComposeT f g m a))
    -> (forall (m :: * -> *) a b.
        Monad m =>
        (a -> m b) -> ComposeT f g m a -> m (ComposeT f g m b))
    -> (forall (m :: * -> *) a.
        Monad m =>
        ComposeT f g m (m a) -> m (ComposeT f g m a))
    -> Traversable (ComposeT f g m)
    forall (t :: * -> *).
    Functor t
    -> Foldable t
    -> (forall (f :: * -> *) a b.
        Applicative f =>
        (a -> f b) -> t a -> f (t b))
    -> (forall (f :: * -> *) a. Applicative f => t (f a) -> f (t a))
    -> (forall (m :: * -> *) a b.
        Monad m =>
        (a -> m b) -> t a -> m (t b))
    -> (forall (m :: * -> *) a. Monad m => t (m a) -> m (t a))
    -> Traversable t
    forall (m :: * -> *) a.
    Monad m =>
    ComposeT f g m (m a) -> m (ComposeT f g m a)
    forall (f :: * -> *) a.
    Applicative f =>
    ComposeT f g m (f a) -> f (ComposeT f g m a)
    forall (m :: * -> *) a b.
    Monad m =>
    (a -> m b) -> ComposeT f g m a -> m (ComposeT f g m b)
    forall (f :: * -> *) a b.
    Applicative f =>
    (a -> f b) -> ComposeT f g m a -> f (ComposeT f g m b)
    forall {f :: (* -> *) -> * -> *} {g :: (* -> *) -> * -> *}
           {m :: * -> *}.
    Traversable (f (g m)) =>
    Functor (ComposeT f g m)
    forall {f :: (* -> *) -> * -> *} {g :: (* -> *) -> * -> *}
           {m :: * -> *}.
    Traversable (f (g m)) =>
    Foldable (ComposeT f g m)
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) (m :: * -> *) a.
    (Traversable (f (g m)), Monad m) =>
    ComposeT f g m (m a) -> m (ComposeT f g m a)
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) (f :: * -> *) a.
    (Traversable (f (g m)), Applicative f) =>
    ComposeT f g m (f a) -> f (ComposeT f g m a)
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) (m :: * -> *) a b.
    (Traversable (f (g m)), Monad m) =>
    (a -> m b) -> ComposeT f g m a -> m (ComposeT f g m b)
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) (f :: * -> *) a b.
    (Traversable (f (g m)), Applicative f) =>
    (a -> f b) -> ComposeT f g m a -> f (ComposeT f g m b)
    $ctraverse :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) (f :: * -> *) a b.
    (Traversable (f (g m)), Applicative f) =>
    (a -> f b) -> ComposeT f g m a -> f (ComposeT f g m b)
    traverse :: forall (f :: * -> *) a b.
    Applicative f =>
    (a -> f b) -> ComposeT f g m a -> f (ComposeT f g m b)
    $csequenceA :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) (f :: * -> *) a.
    (Traversable (f (g m)), Applicative f) =>
    ComposeT f g m (f a) -> f (ComposeT f g m a)
    sequenceA :: forall (f :: * -> *) a.
    Applicative f =>
    ComposeT f g m (f a) -> f (ComposeT f g m a)
    $cmapM :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) (m :: * -> *) a b.
    (Traversable (f (g m)), Monad m) =>
    (a -> m b) -> ComposeT f g m a -> m (ComposeT f g m b)
    mapM :: forall (m :: * -> *) a b.
    Monad m =>
    (a -> m b) -> ComposeT f g m a -> m (ComposeT f g m b)
    $csequence :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) (m :: * -> *) a.
    (Traversable (f (g m)), Monad m) =>
    ComposeT f g m (m a) -> m (ComposeT f g m a)
    sequence :: forall (m :: * -> *) a.
    Monad m =>
    ComposeT f g m (m a) -> m (ComposeT f g m a)
    Traversable
        , Applicative (ComposeT f g m)
    Applicative (ComposeT f g m)
    -> (forall a b.
        ComposeT f g m a -> (a -> ComposeT f g m b) -> ComposeT f g m b)
    -> (forall a b.
        ComposeT f g m a -> ComposeT f g m b -> ComposeT f g m b)
    -> (forall a. a -> ComposeT f g m a)
    -> Monad (ComposeT f g m)
    forall a. a -> ComposeT f g m a
    forall a b.
    ComposeT f g m a -> ComposeT f g m b -> ComposeT f g m b
    forall a b.
    ComposeT f g m a -> (a -> ComposeT f g m b) -> ComposeT f g m b
    forall (m :: * -> *).
    Applicative m
    -> (forall a b. m a -> (a -> m b) -> m b)
    -> (forall a b. m a -> m b -> m b)
    -> (forall a. a -> m a)
    -> Monad m
    forall {f :: (* -> *) -> * -> *} {g :: (* -> *) -> * -> *}
           {m :: * -> *}.
    Monad (f (g m)) =>
    Applicative (ComposeT f g m)
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Monad (f (g m)) =>
    a -> ComposeT f g m a
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a b.
    Monad (f (g m)) =>
    ComposeT f g m a -> ComposeT f g m b -> ComposeT f g m b
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a b.
    Monad (f (g m)) =>
    ComposeT f g m a -> (a -> ComposeT f g m b) -> ComposeT f g m b
    $c>>= :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a b.
    Monad (f (g m)) =>
    ComposeT f g m a -> (a -> ComposeT f g m b) -> ComposeT f g m b
    >>= :: forall a b.
    ComposeT f g m a -> (a -> ComposeT f g m b) -> ComposeT f g m b
    $c>> :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a b.
    Monad (f (g m)) =>
    ComposeT f g m a -> ComposeT f g m b -> ComposeT f g m b
    >> :: forall a b.
    ComposeT f g m a -> ComposeT f g m b -> ComposeT f g m b
    $creturn :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    Monad (f (g m)) =>
    a -> ComposeT f g m a
    return :: forall a. a -> ComposeT f g m a
    Monad
        , Monad (ComposeT f g m)
    Monad (ComposeT f g m)
    -> (forall a b.
        ((a -> ComposeT f g m b) -> ComposeT f g m a) -> ComposeT f g m a)
    -> MonadCont (ComposeT f g m)
    forall a b.
    ((a -> ComposeT f g m b) -> ComposeT f g m a) -> ComposeT f g m a
    forall (m :: * -> *).
    Monad m -> (forall a b. ((a -> m b) -> m a) -> m a) -> MonadCont m
    forall {f :: (* -> *) -> * -> *} {g :: (* -> *) -> * -> *}
           {m :: * -> *}.
    MonadCont (f (g m)) =>
    Monad (ComposeT f g m)
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a b.
    MonadCont (f (g m)) =>
    ((a -> ComposeT f g m b) -> ComposeT f g m a) -> ComposeT f g m a
    $ccallCC :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a b.
    MonadCont (f (g m)) =>
    ((a -> ComposeT f g m b) -> ComposeT f g m a) -> ComposeT f g m a
    callCC :: forall a b.
    ((a -> ComposeT f g m b) -> ComposeT f g m a) -> ComposeT f g m a
    MonadCont
        , MonadError e
        , Monad (ComposeT f g m)
    Monad (ComposeT f g m)
    -> (forall a. String -> ComposeT f g m a)
    -> MonadFail (ComposeT f g m)
    forall a. String -> ComposeT f g m a
    forall (m :: * -> *).
    Monad m -> (forall a. String -> m a) -> MonadFail m
    forall {f :: (* -> *) -> * -> *} {g :: (* -> *) -> * -> *}
           {m :: * -> *}.
    MonadFail (f (g m)) =>
    Monad (ComposeT f g m)
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    MonadFail (f (g m)) =>
    String -> ComposeT f g m a
    $cfail :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    MonadFail (f (g m)) =>
    String -> ComposeT f g m a
    fail :: forall a. String -> ComposeT f g m a
    MonadFail
        , Monad (ComposeT f g m)
    Monad (ComposeT f g m)
    -> (forall a. IO a -> ComposeT f g m a) -> MonadIO (ComposeT f g m)
    forall a. IO a -> ComposeT f g m a
    forall (m :: * -> *).
    Monad m -> (forall a. IO a -> m a) -> MonadIO m
    forall {f :: (* -> *) -> * -> *} {g :: (* -> *) -> * -> *}
           {m :: * -> *}.
    MonadIO (f (g m)) =>
    Monad (ComposeT f g m)
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    MonadIO (f (g m)) =>
    IO a -> ComposeT f g m a
    $cliftIO :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    MonadIO (f (g m)) =>
    IO a -> ComposeT f g m a
    liftIO :: forall a. IO a -> ComposeT f g m a
    MonadIO
        , Monad (ComposeT f g m)
    Alternative (ComposeT f g m)
    Alternative (ComposeT f g m)
    -> Monad (ComposeT f g m)
    -> (forall a. ComposeT f g m a)
    -> (forall a.
        ComposeT f g m a -> ComposeT f g m a -> ComposeT f g m a)
    -> MonadPlus (ComposeT f g m)
    forall a. ComposeT f g m a
    forall a. ComposeT f g m a -> ComposeT f g m a -> ComposeT f g m a
    forall (m :: * -> *).
    Alternative m
    -> Monad m
    -> (forall a. m a)
    -> (forall a. m a -> m a -> m a)
    -> MonadPlus m
    forall {f :: (* -> *) -> * -> *} {g :: (* -> *) -> * -> *}
           {m :: * -> *}.
    MonadPlus (f (g m)) =>
    Monad (ComposeT f g m)
    forall {f :: (* -> *) -> * -> *} {g :: (* -> *) -> * -> *}
           {m :: * -> *}.
    MonadPlus (f (g m)) =>
    Alternative (ComposeT f g m)
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    MonadPlus (f (g m)) =>
    ComposeT f g m a
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    MonadPlus (f (g m)) =>
    ComposeT f g m a -> ComposeT f g m a -> ComposeT f g m a
    $cmzero :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    MonadPlus (f (g m)) =>
    ComposeT f g m a
    mzero :: forall a. ComposeT f g m a
    $cmplus :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    MonadPlus (f (g m)) =>
    ComposeT f g m a -> ComposeT f g m a -> ComposeT f g m a
    mplus :: forall a. ComposeT f g m a -> ComposeT f g m a -> ComposeT f g m a
    MonadPlus
        , MonadReader r
        , MonadRWS r w s
        , MonadState s
        , MonadWriter w
        )

    instance (MFunctor f, MonadTrans f, MonadTrans g) => MonadTrans (ComposeT f g)
      where
        lift :: forall (m :: * -> *) a. Monad m => m a -> ComposeT f g m a
    lift = f (g m) a -> ComposeT f g m a
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    f (g m) a -> ComposeT f g m a
    ComposeT (f (g m) a -> ComposeT f g m a)
    -> (m a -> f (g m) a) -> m a -> ComposeT f g m a
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . (forall a. m a -> g m a) -> f m a -> f (g m) a
    forall {k} (t :: (* -> *) -> k -> *) (m :: * -> *) (n :: * -> *)
           (b :: k).
    (MFunctor t, Monad m) =>
    (forall a. m a -> n a) -> t m b -> t n b
    forall (m :: * -> *) (n :: * -> *) b.
    Monad m =>
    (forall a. m a -> n a) -> f m b -> f n b
    hoist m a -> g m a
    forall a. m a -> g m a
    forall (m :: * -> *) a. Monad m => m a -> g m a
    forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
    (MonadTrans t, Monad m) =>
    m a -> t m a
    lift (f m a -> f (g m) a) -> (m a -> f m a) -> m a -> f (g m) a
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . m a -> f m a
    forall (m :: * -> *) a. Monad m => m a -> f m a
    forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
    (MonadTrans t, Monad m) =>
    m a -> t m a
    lift

    #if __GLASGOW_HASKELL__ >= 806
    instance (MFunctor f, MFunctor g, forall m. Monad m => Monad (g m))
        => MFunctor (ComposeT f g) where
        hoist :: forall (m :: * -> *) (n :: * -> *) b.
    Monad m =>
    (forall a. m a -> n a) -> ComposeT f g m b -> ComposeT f g n b
    hoist forall a. m a -> n a
    f (ComposeT f (g m) b
    m) = f (g n) b -> ComposeT f g n b
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    f (g m) a -> ComposeT f g m a
    ComposeT ((forall a. g m a -> g n a) -> f (g m) b -> f (g n) b
    forall {k} (t :: (* -> *) -> k -> *) (m :: * -> *) (n :: * -> *)
           (b :: k).
    (MFunctor t, Monad m) =>
    (forall a. m a -> n a) -> t m b -> t n b
    forall (m :: * -> *) (n :: * -> *) b.
    Monad m =>
    (forall a. m a -> n a) -> f m b -> f n b
    hoist ((forall a. m a -> n a) -> g m a -> g n a
    forall {k} (t :: (* -> *) -> k -> *) (m :: * -> *) (n :: * -> *)
           (b :: k).
    (MFunctor t, Monad m) =>
    (forall a. m a -> n a) -> t m b -> t n b
    forall (m :: * -> *) (n :: * -> *) b.
    Monad m =>
    (forall a. m a -> n a) -> g m b -> g n b
    hoist m a -> n a
    forall a. m a -> n a
    f) f (g m) b
    m)
    #endif

    -- | Transform the computation inside a 'ComposeT'.
    mapComposeT :: (f (g m) a -> p (q n) b) -> ComposeT f g m a -> ComposeT p q n b
    mapComposeT :: forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a (p :: (* -> *) -> * -> *) (q :: (* -> *) -> * -> *)
           (n :: * -> *) b.
    (f (g m) a -> p (q n) b) -> ComposeT f g m a -> ComposeT p q n b
    mapComposeT f (g m) a -> p (q n) b
    f = p (q n) b -> ComposeT p q n b
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    f (g m) a -> ComposeT f g m a
    ComposeT (p (q n) b -> ComposeT p q n b)
    -> (ComposeT f g m a -> p (q n) b)
    -> ComposeT f g m a
    -> ComposeT p q n b
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . f (g m) a -> p (q n) b
    f (f (g m) a -> p (q n) b)
    -> (ComposeT f g m a -> f (g m) a) -> ComposeT f g m a -> p (q n) b
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . ComposeT f g m a -> f (g m) a
    forall (f :: (* -> *) -> * -> *) (g :: (* -> *) -> * -> *)
           (m :: * -> *) a.
    ComposeT f g m a -> f (g m) a
    getComposeT