module Pandora.Core.Functor where

data Variant = Co | Contra

infixr 1 :.
type (:.) t u a = t (u a)

infixr 1 .:
type (.:) t u a = u (t a)

infixr 0 >
type (>) t a = t a

infixr 2 ::|:., ::|.:, ::|::
type (::|:.) p a b = p (p a b) b
type (::|.:) p a b = p a (p a b)
type (::|::) p a b = p (p a b) (p a b)