pandora-0.4.7: 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 ((>$<)))
import Pandora.Core.Appliable (Appliable ((!)))
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)
instance Appliable (Flip m) b c m c b where
(!) (Flip m) = m