module Pandora.Paradigm.Schemes.PTU where import Pandora.Core.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