pandora-0.5.4: Pandora/Paradigm/Schemes/UTU.hs
module Pandora.Paradigm.Schemes.UTU where
import Pandora.Core.Functor (type (:.), type (>>>))
import Pandora.Core.Interpreted (Interpreted (Primary, run, unite))
import Pandora.Pattern.Functor.Covariant (Covariant)
import Pandora.Pattern.Functor.Contravariant (Contravariant)
newtype UTU ct cu t u u' a = UTU (u :. t :. u' >>> a)
type (<.<:>.>) = UTU Covariant Covariant Covariant
type (>.<:>.>) = UTU Contravariant Covariant Covariant
type (<.<:>.<) = UTU Covariant Covariant Contravariant
type (>.<:>.<) = UTU Contravariant Covariant Contravariant
type (<.>:<.>) = UTU Covariant Contravariant Covariant
type (>.>:<.>) = UTU Contravariant Contravariant Covariant
type (<.>:<.<) = UTU Covariant Contravariant Contravariant
type (>.>:<.<) = UTU Contravariant Contravariant Contravariant
instance Interpreted (->) (UTU ct cu t u u') where
type Primary (UTU ct cu t u u') a = u :. t :. u' >>> a
run ~(UTU x) = x
unite = UTU