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