syntactic-3.3: src/Language/Syntactic/Functional/Tuple.hs
{-# LANGUAGE TemplateHaskell #-}
-- | Construction and elimination of tuples
module Language.Syntactic.Functional.Tuple
( module Language.Syntactic.Functional.Tuple
-- * Template Haskell
, eqPred
, classPred
, mkSelectClassPlusInstances
, deriveSyntacticForTuples
) where
import Language.Syntactic
import Language.Syntactic.TH
import Language.Syntactic.Functional
import Language.Syntactic.Functional.Tuple.TH
--------------------------------------------------------------------------------
-- * Generic tuple projection
--------------------------------------------------------------------------------
mkSelectClassPlusInstances 15
--------------------------------------------------------------------------------
-- * Symbols
--------------------------------------------------------------------------------
-- | Construction and elimination of tuples
mkTupleSym "Tuple" "Tup" "Sel" 15
deriveSymbol ''Tuple
deriveEquality ''Tuple
deriveRender id ''Tuple
instance StringTree Tuple
instance Eval Tuple
where
evalSym Tup2 = (,)
evalSym Tup3 = (,,)
evalSym Tup4 = (,,,)
evalSym Tup5 = (,,,,)
evalSym Tup6 = (,,,,,)
evalSym Tup7 = (,,,,,,)
evalSym Tup8 = (,,,,,,,)
evalSym Tup9 = (,,,,,,,,)
evalSym Tup10 = (,,,,,,,,,)
evalSym Tup11 = (,,,,,,,,,,)
evalSym Tup12 = (,,,,,,,,,,,)
evalSym Tup13 = (,,,,,,,,,,,,)
evalSym Tup14 = (,,,,,,,,,,,,,)
evalSym Tup15 = (,,,,,,,,,,,,,,)
evalSym Sel1 = select1
evalSym Sel2 = select2
evalSym Sel3 = select3
evalSym Sel4 = select4
evalSym Sel5 = select5
evalSym Sel6 = select6
evalSym Sel7 = select7
evalSym Sel8 = select8
evalSym Sel9 = select9
evalSym Sel10 = select10
evalSym Sel11 = select11
evalSym Sel12 = select12
evalSym Sel13 = select13
evalSym Sel14 = select14
evalSym Sel15 = select15
-- It would be possible to generate this instance, but the gain would be
-- small, and it's very hard to get it wrong anyway.
instance EvalEnv Tuple env