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

import Pandora.Core.Functor (type (:.), type (:=))
import Pandora.Paradigm.Controlflow.Effect.Interpreted (Interpreted (Primary, run))

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