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)