------------------------------------------------------------------------------------------- -- | -- Module : Control.Functor.Pointed.Indexed -- Copyright : 2008 Edward Kmett -- License : BSD3 -- -- Maintainer : Edward Kmett -- Stability : experimental -- Portability : portable -- ------------------------------------------------------------------------------------------- module Control.Functor.Pointed.Indexed ( IxPointed(..) , IxCopointed(..) , module Control.Functor.Indexed , module Control.Functor.Pointed )where import Control.Functor.Pointed import Control.Functor.Indexed class IxFunctor m => IxPointed m where ireturn :: a -> m i i a class IxFunctor w => IxCopointed w where iextract :: w i i a -> a instance Pointed m => IxPointed (LiftIx m) where ireturn = LiftIx . point instance Copointed m => IxCopointed (LiftIx m) where iextract = extract . lowerIx {-# RULES "ireturn/iextract" ireturn . iextract = id "iextract/ireturn" iextract . ireturn = id #-}