pandora-0.5.5: Pandora/Pattern/Morphism/Flip.hs
module Pandora.Pattern.Morphism.Flip where
import Pandora.Pattern.Semigroupoid (Semigroupoid ((.)))
import Pandora.Pattern.Category (Category (identity))
import Pandora.Pattern.Functor.Covariant (Covariant ((<-|-)))
import Pandora.Pattern.Functor.Contravariant (Contravariant ((>-|-)))
newtype Flip (v :: * -> * -> *) a e = Flip (v e a)
instance Semigroupoid m => Semigroupoid (Flip m) where
Flip g . Flip f = Flip (f . g)
instance Category m => Category (Flip m) where
identity = Flip identity
instance (Category m, Covariant m m t) => Contravariant (Flip m) m t where
(>-|-) (Flip f) = (<-|-) f
instance (Category m, Covariant m m t) => Contravariant m (Flip m) t where
(>-|-) f = Flip ((<-|-) f)
instance (Category m, Covariant m m t) => Covariant (Flip m) (Flip m) t where
(<-|-) (Flip f) = Flip ((<-|-) f)