{-# LANGUAGE TypeOperators #-} {-# LANGUAGE Rank2Types #-} {-# LANGUAGE DefaultSignatures #-} -- Compare to indexed.Data.Functor.Indexed (IxCopointed) module MHask.Indexed.Copointed where import MHask.Util import Control.Monad.Trans.State import Control.Monad.Trans.Reader import Control.Monad.Trans.Writer import qualified MHask.Copointed as MHask import qualified MHask.Indexed.Functor as MHask class (MHask.IxFunctor t) => IxCopointed t where iextract :: (Monad m, Monad (t i i m)) => t i i m ~> m default iextract :: (Monad m, Monad (t i i m), MHask.Copointed (t i i)) => t i i m ~> m iextract = MHask.extract