{-# LANGUAGE UndecidableInstances #-} -- | 'Syntactic' instances for tuples module Language.Syntactic.Features.TupleSyntactic where import Language.Syntactic.Syntax import Language.Syntactic.Features.Tuple instance ( Syntactic a dom , Syntactic b dom , Tuple :<: dom , Select :<: dom ) => Syntactic (a,b) dom where type Internal (a,b) = ( Internal a , Internal b ) desugar (a,b) = inject Tup2 :$: desugar a :$: desugar b sugar a = ( sugar $ inject Sel1 :$: a , sugar $ inject Sel2 :$: a ) instance ( Syntactic a dom , Syntactic b dom , Syntactic c dom , Tuple :<: dom , Select :<: dom ) => Syntactic (a,b,c) dom where type Internal (a,b,c) = ( Internal a , Internal b , Internal c ) desugar (a,b,c) = inject Tup3 :$: desugar a :$: desugar b :$: desugar c sugar a = ( sugar $ inject Sel1 :$: a , sugar $ inject Sel2 :$: a , sugar $ inject Sel3 :$: a ) instance ( Syntactic a dom , Syntactic b dom , Syntactic c dom , Syntactic d dom , Tuple :<: dom , Select :<: dom ) => Syntactic (a,b,c,d) dom where type Internal (a,b,c,d) = ( Internal a , Internal b , Internal c , Internal d ) desugar (a,b,c,d) = inject Tup4 :$: desugar a :$: desugar b :$: desugar c :$: desugar d sugar a = ( sugar $ inject Sel1 :$: a , sugar $ inject Sel2 :$: a , sugar $ inject Sel3 :$: a , sugar $ inject Sel4 :$: a ) instance ( Syntactic a dom , Syntactic b dom , Syntactic c dom , Syntactic d dom , Syntactic e dom , Tuple :<: dom , Select :<: dom ) => Syntactic (a,b,c,d,e) dom where type Internal (a,b,c,d,e) = ( Internal a , Internal b , Internal c , Internal d , Internal e ) desugar (a,b,c,d,e) = inject Tup5 :$: desugar a :$: desugar b :$: desugar c :$: desugar d :$: desugar e sugar a = ( sugar $ inject Sel1 :$: a , sugar $ inject Sel2 :$: a , sugar $ inject Sel3 :$: a , sugar $ inject Sel4 :$: a , sugar $ inject Sel5 :$: a ) instance ( Syntactic a dom , Syntactic b dom , Syntactic c dom , Syntactic d dom , Syntactic e dom , Syntactic f dom , Tuple :<: dom , Select :<: dom ) => Syntactic (a,b,c,d,e,f) dom where type Internal (a,b,c,d,e,f) = ( Internal a , Internal b , Internal c , Internal d , Internal e , Internal f ) desugar (a,b,c,d,e,f) = inject Tup6 :$: desugar a :$: desugar b :$: desugar c :$: desugar d :$: desugar e :$: desugar f sugar a = ( sugar $ inject Sel1 :$: a , sugar $ inject Sel2 :$: a , sugar $ inject Sel3 :$: a , sugar $ inject Sel4 :$: a , sugar $ inject Sel5 :$: a , sugar $ inject Sel6 :$: a ) instance ( Syntactic a dom , Syntactic b dom , Syntactic c dom , Syntactic d dom , Syntactic e dom , Syntactic f dom , Syntactic g dom , Tuple :<: dom , Select :<: dom ) => Syntactic (a,b,c,d,e,f,g) dom where type Internal (a,b,c,d,e,f,g) = ( Internal a , Internal b , Internal c , Internal d , Internal e , Internal f , Internal g ) desugar (a,b,c,d,e,f,g) = inject Tup7 :$: desugar a :$: desugar b :$: desugar c :$: desugar d :$: desugar e :$: desugar f :$: desugar g sugar a = ( sugar $ inject Sel1 :$: a , sugar $ inject Sel2 :$: a , sugar $ inject Sel3 :$: a , sugar $ inject Sel4 :$: a , sugar $ inject Sel5 :$: a , sugar $ inject Sel6 :$: a , sugar $ inject Sel7 :$: a )