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