{-# LANGUAGE TemplateHaskell #-}
module Language.Syntactic.Functional.Tuple where
import Language.Syntactic
import Language.Syntactic.TH
import Language.Syntactic.Functional
data Tuple a
where
Pair :: Tuple (a :-> b :-> Full (a,b))
Fst :: Tuple ((a,b) :-> Full a)
Snd :: Tuple ((a,b) :-> Full b)
deriveSymbol ''Tuple
deriveEquality ''Tuple
deriveRender id ''Tuple
instance StringTree Tuple
instance Eval Tuple
where
evalSym :: Tuple sig -> Denotation sig
evalSym Tuple sig
Pair = (,)
evalSym Tuple sig
Fst = Denotation sig
forall a b. (a, b) -> a
fst
evalSym Tuple sig
Snd = Denotation sig
forall a b. (a, b) -> b
snd
instance EvalEnv Tuple env