module Control.Comonad.Indexed
( IxFunctor(..)
, IxCopointed(..)
, IxComonad(..)
, iduplicate
) where
import Data.Functor.Indexed
class IxCopointed w => IxComonad w where
iextend :: (w j k a -> b) -> w i k a -> w i j b
iduplicate :: IxComonad w => w i k a -> w i j (w j k a)
iduplicate :: forall {k} (w :: k -> k -> * -> *) (i :: k) (k :: k) a (j :: k).
IxComonad w =>
w i k a -> w i j (w j k a)
iduplicate = forall {k} (w :: k -> k -> * -> *) (j :: k) (k :: k) a b (i :: k).
IxComonad w =>
(w j k a -> b) -> w i k a -> w i j b
iextend forall a. a -> a
id