module Pandora.Paradigm.Schemes.U_T where import Pandora.Paradigm.Controlflow.Effect.Interpreted (Interpreted (Primary, run, unite)) newtype U_T ct cu t p u a = U_T (p (u a) (t a)) instance Interpreted (U_T ct cu t p u) where type Primary (U_T ct cu t p u) a = p (u a) (t a) run :: U_T ct cu t p u a -> Primary (U_T ct cu t p u) a run ~(U_T p (u a) (t a) x) = p (u a) (t a) Primary (U_T ct cu t p u) a x unite :: Primary (U_T ct cu t p u) a -> U_T ct cu t p u a unite = Primary (U_T ct cu t p u) a -> U_T ct cu t p u a forall k k k k k (ct :: k) (cu :: k) (t :: k -> k) (p :: k -> k -> *) (u :: k -> k) (a :: k). p (u a) (t a) -> U_T ct cu t p u a U_T