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