module Language.Syntactic.TypeRep.Sugar.TupleTR where
import Language.Syntactic
import Language.Syntactic.Functional.Tuple
import Data.TypeRep
import Data.TypeRep.Types.Tuple
import Data.TypeRep.Types.Tuple.Typeable ()
import Language.Syntactic.TypeRep
instance
( sym ~ (s :&: TypeRep t)
, Syntactic a, Domain a ~ sym
, Syntactic b, Domain b ~ sym
, Tuple :<: s
, Typeable t (Internal a)
, Typeable t (Internal b)
, TupleType :<: t
) =>
Syntactic (a,b)
where
type Domain (a,b) = Domain a
type Internal (a,b) = (Internal a, Internal b)
desugar (a,b) = sugarSymTR Tup2 a b
sugar ab = (sugarSymTR Sel1 ab, sugarSymTR Sel2 ab)
instance
( sym ~ (s :&: TypeRep t)
, Syntactic a, Domain a ~ sym
, Syntactic b, Domain b ~ sym
, Syntactic c, Domain c ~ sym
, Tuple :<: s
, Typeable t (Internal a)
, Typeable t (Internal b)
, Typeable t (Internal c)
, TupleType :<: t
) =>
Syntactic (a,b,c)
where
type Domain (a,b,c) = Domain a
type Internal (a,b,c) = (Internal a, Internal b, Internal c)
desugar (a,b,c) = sugarSymTR Tup3 a b c
sugar abc = (sugarSymTR Sel1 abc, sugarSymTR Sel2 abc, sugarSymTR Sel3 abc)
instance
( sym ~ (s :&: TypeRep t)
, Syntactic a, Domain a ~ sym
, Syntactic b, Domain b ~ sym
, Syntactic c, Domain c ~ sym
, Syntactic d, Domain d ~ sym
, Tuple :<: s
, Typeable t (Internal a)
, Typeable t (Internal b)
, Typeable t (Internal c)
, Typeable t (Internal d)
, TupleType :<: t
) =>
Syntactic (a,b,c,d)
where
type Domain (a,b,c,d) = Domain a
type Internal (a,b,c,d) = (Internal a, Internal b, Internal c, Internal d)
desugar (a,b,c,d) = sugarSymTR Tup4 a b c d
sugar abcd = (sugarSymTR Sel1 abcd, sugarSymTR Sel2 abcd, sugarSymTR Sel3 abcd, sugarSymTR Sel4 abcd)