------------------------------------------------------------------------------------------- -- | -- Module : Control.Functor.Contra -- Copyright : 2008 Edward Kmett -- License : BSD -- -- Maintainer : Edward Kmett -- Stability : experimental -- Portability : portable -- ------------------------------------------------------------------------------------------- module Control.Functor.Contra ( ContraFunctor(..) , ContraF(..) ) where import Control.Applicative class ContraFunctor f where contramap :: (a -> b) -> f b -> f a newtype ContraF a b = ContraF { runContraF :: b -> a } instance ContraFunctor (ContraF a) where contramap g (ContraF f) = ContraF (f . g) instance ContraFunctor (Const a) where contramap _ (Const a) = Const a