module Pandora.Paradigm.Schemes.UTU where import Pandora.Core.Functor (type (:.), type (:=)) import Pandora.Pattern.Functor.Covariant (Covariant) import Pandora.Pattern.Functor.Contravariant (Contravariant) import Pandora.Paradigm.Controlflow.Effect.Interpreted (Interpreted (Primary, run, unite)) 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 ct cu t u u' a -> Primary (UTU ct cu t u u') a run ~(UTU (u :. (t :. u')) := a x) = (u :. (t :. u')) := a Primary (UTU ct cu t u u') a x unite :: Primary (UTU ct cu t u u') a -> UTU ct cu t u u' a unite = Primary (UTU ct cu t u u') a -> UTU ct cu t u u' a forall k k k k k (ct :: k) (cu :: k) (t :: k -> k) (u :: k -> *) (u' :: k -> k) (a :: k). ((u :. (t :. u')) := a) -> UTU ct cu t u u' a UTU