    {-# LANGUAGE Safe #-}
    -----------------------------------------------------------------------------
    -- |
    -- Module      :  Control.Comonad.Trans.Class
    -- Copyright   :  (C) 2008-2015 Edward Kmett
    -- License     :  BSD-style (see the file LICENSE)
    --
    -- Maintainer  :  Edward Kmett <ekmett@gmail.com>
    -- Stability   :  provisional
    -- Portability :  portable
    ----------------------------------------------------------------------------
    module Control.Comonad.Trans.Class
      ( ComonadTrans(..) ) where

    import Control.Comonad
    import Control.Monad.Trans.Identity

    class ComonadTrans t where
      lower :: Comonad w => t w a -> w a

    -- avoiding orphans
    instance ComonadTrans IdentityT where
      lower :: forall (w :: * -> *) a. Comonad w => IdentityT w a -> w a
    lower = IdentityT w a -> w a
    forall {k} (f :: k -> *) (a :: k). IdentityT f a -> f a
    runIdentityT