module Pandora.Paradigm.Schemes.TUVW (TUVW (..)) where

import Pandora.Core.Functor (type (:.), type (>>>))
import Pandora.Core.Interpreted (Interpreted (Primary, run, unite))

newtype TUVW ct cu cv cw t u v w a = TUVW (t :. u :. v :. w >>> a)

instance Interpreted (->) (TUVW ct cu cv cw t u v w) where
	type Primary (TUVW ct cu cv cw t u v w) a = t :. u :. v :. w >>> a
	run :: ((->) < TUVW ct cu cv cw t u v w a)
< Primary (TUVW ct cu cv cw t u v w) a
run ~(TUVW (t :. (u :. (v :. w))) >>> a
x) = (t :. (u :. (v :. w))) >>> a
Primary (TUVW ct cu cv cw t u v w) a
x
	unite :: ((->) < Primary (TUVW ct cu cv cw t u v w) a)
< TUVW ct cu cv cw t u v w a
unite = ((->) < Primary (TUVW ct cu cv cw t u v w) a)
< TUVW ct cu cv cw t u v w a
forall k k k k k k k k (ct :: k) (cu :: k) (cv :: k) (cw :: k)
       (t :: k -> *) (u :: k -> k) (v :: k -> k) (w :: k -> k) (a :: k).
((t :. (u :. (v :. w))) >>> a) -> TUVW ct cu cv cw t u v w a
TUVW