module Pandora.Paradigm.Schemes.P_Q_T where

import Pandora.Core.Interpreted (Interpreted (Primary, run, unite))

newtype P_Q_T (p :: * -> * -> *) (q :: * -> * -> *) (t :: * -> *) (a :: *) (b :: *) = P_Q_T (p a (q (t b) a))

instance Interpreted (->) (P_Q_T p q t a) where
	type Primary (P_Q_T p q t a) b = (p a (q (t b) a))
	run :: ((->) < P_Q_T p q t a a) < Primary (P_Q_T p q t a) a
run ~(P_Q_T p a (q (t a) a)
x) = p a (q (t a) a)
Primary (P_Q_T p q t a) a
x
	unite :: ((->) < Primary (P_Q_T p q t a) a) < P_Q_T p q t a a
unite = ((->) < Primary (P_Q_T p q t a) a) < P_Q_T p q t a a
forall (p :: * -> * -> *) (q :: * -> * -> *) (t :: * -> *) a b.
p a (q (t b) a) -> P_Q_T p q t a b
P_Q_T