module Control.Functor.Composition (type (:.:), type (:.%), type (%.:), type (%.%)) where

import Control.Functor.Contravariant (Contravariant)
import Control.Functor.Covariant (Covariant)

infixr 0 :.:
type (:.:) t u a = (Covariant t, Covariant u) => t (u a)

infixr 0 :.%
type (:.%) t u a = (Covariant t, Contravariant u) => t (u a)

infixr 0 %.:
type (%.:) t u a = (Contravariant t, Covariant u) => t (u a)

infixr 0 %.%
type (%.%) t u a = (Contravariant t, Contravariant u) => t (u a)