packages feed

pandora-0.1.1: Pandora/Paradigm/Basis/Constant.hs

module Pandora.Paradigm.Basis.Constant (Constant (..)) where

import Pandora.Core.Morphism (($))
import Pandora.Pattern.Functor.Covariant (Covariant ((<$>)))
import Pandora.Pattern.Functor.Contravariant (Contravariant ((>$<)))
import Pandora.Pattern.Functor.Invariant (Invariant (invmap))
import Pandora.Pattern.Functor.Pointable (Pointable (point))
import Pandora.Pattern.Functor.Traversable (Traversable ((->>)))

newtype Constant a b = Constant a

instance Covariant (Constant a) where
	_ <$> Constant x = Constant x

instance Contravariant (Constant a) where
	_ >$< Constant x = Constant x

instance Invariant (Constant a) where
	invmap _ _ (Constant x) = Constant x

instance Traversable (Constant a) where
	Constant x ->> _ = point (Constant x)