{-# LANGUAGE RankNTypes, TypeOperators, DefaultSignatures #-}

-- | Compare to indexed.Data.Functor.Indexed (IxPointed)
module MHask.Indexed.Pointed where


import MHask.Arrow







import qualified MHask.Pointed as MHask
import qualified MHask.Indexed.Functor as MHask

-- | The indexed version of "MHask.Pointed".
-- The dual of "MHask.Indexed.Copointed".
class (MHask.IxFunctor t) => IxPointed t where
  ireturn :: (Monad m)
    => m ~> t i i m
  default ireturn :: (Monad m,
                      MHask.Pointed (t i i))
    => m ~> t i i m
  ireturn = MHask.return