------------------------------------------------------------------------------------------- -- | -- Module : Control.Bifunctor.Pointed -- Copyright : 2008 Edward Kmett -- License : BSD -- -- Maintainer : Edward Kmett -- Stability : experimental -- Portability : non-portable (functional-dependencies) -- ------------------------------------------------------------------------------------------- module Control.Bifunctor.Pointed ( PPointed(..) , PCopointed(..) ) where import Control.Bifunctor class Bifunctor f => PPointed f where preturn :: a -> f a c class Bifunctor f => PCopointed f where pextract :: f a c -> a {-# RULES "bimap id g . preturn" forall g. bimap id g . preturn = preturn "pextract . bimap id g" forall g. pextract . bimap id g = pextract "preturn/pextract" preturn . pextract = id "pextract/preturn" pextract. preturn = id #-}