packages feed

constraint-tuples 0.1.1 → 0.1.2

raw patch · 9 files changed

+1075/−143 lines, 9 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

+ Data.Tuple.Constraint.ClassNewtype: instance () :: Constraint => Data.Tuple.Constraint.ClassNewtype.CTuple0
+ Data.Tuple.Constraint.TypeFamily: class c1 => CTuple1 c1
+ Data.Tuple.Constraint.TypeFamily: type CTuple0 = Decomposer0 (() :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple10 = Decomposer10 (((), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple11 = Decomposer11 (((), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple12 = Decomposer12 (((), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple13 = Decomposer13 (((), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple14 = Decomposer14 (((), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple15 = Decomposer15 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple16 = Decomposer16 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple17 = Decomposer17 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple18 = Decomposer18 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple19 = Decomposer19 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple2 = Decomposer2 (((), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple20 = Decomposer20 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple21 = Decomposer21 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple22 = Decomposer22 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple23 = Decomposer23 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple24 = Decomposer24 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple25 = Decomposer25 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple26 = Decomposer26 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple27 = Decomposer27 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple28 = Decomposer28 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple29 = Decomposer29 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple3 = Decomposer3 (((), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple30 = Decomposer30 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple31 = Decomposer31 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple32 = Decomposer32 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple33 = Decomposer33 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple34 = Decomposer34 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple35 = Decomposer35 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple36 = Decomposer36 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple37 = Decomposer37 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple38 = Decomposer38 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple39 = Decomposer39 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple4 = Decomposer4 (((), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple40 = Decomposer40 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple41 = Decomposer41 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple42 = Decomposer42 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple43 = Decomposer43 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple44 = Decomposer44 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple45 = Decomposer45 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple46 = Decomposer46 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple47 = Decomposer47 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple48 = Decomposer48 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple49 = Decomposer49 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple5 = Decomposer5 (((), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple50 = Decomposer50 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple51 = Decomposer51 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple52 = Decomposer52 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple53 = Decomposer53 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple54 = Decomposer54 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple55 = Decomposer55 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple56 = Decomposer56 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple57 = Decomposer57 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple58 = Decomposer58 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple59 = Decomposer59 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple6 = Decomposer6 (((), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple60 = Decomposer60 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple61 = Decomposer61 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple62 = Decomposer62 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple7 = Decomposer7 (((), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple8 = Decomposer8 (((), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeFamily: type CTuple9 = Decomposer9 (((), (), (), (), (), (), (), (), ()) :: Constraint)
+ Data.Tuple.Constraint.TypeSynonym: class c1 => CTuple1 c1
+ Data.Tuple.Constraint.TypeSynonym: type CTuple0 = Decomposer0 ( 'Proxy :: Proxy (() :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple10 = Decomposer10 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple11 = Decomposer11 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple12 = Decomposer12 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple13 = Decomposer13 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple14 = Decomposer14 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple15 = Decomposer15 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple16 = Decomposer16 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple17 = Decomposer17 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple18 = Decomposer18 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple19 = Decomposer19 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple2 = Decomposer2 ( 'Proxy :: Proxy (((), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple20 = Decomposer20 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple21 = Decomposer21 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple22 = Decomposer22 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple23 = Decomposer23 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple24 = Decomposer24 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple25 = Decomposer25 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple26 = Decomposer26 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple27 = Decomposer27 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple28 = Decomposer28 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple29 = Decomposer29 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple3 = Decomposer3 ( 'Proxy :: Proxy (((), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple30 = Decomposer30 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple31 = Decomposer31 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple32 = Decomposer32 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple33 = Decomposer33 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple34 = Decomposer34 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple35 = Decomposer35 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple36 = Decomposer36 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple37 = Decomposer37 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple38 = Decomposer38 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple39 = Decomposer39 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple4 = Decomposer4 ( 'Proxy :: Proxy (((), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple40 = Decomposer40 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple41 = Decomposer41 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple42 = Decomposer42 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple43 = Decomposer43 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple44 = Decomposer44 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple45 = Decomposer45 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple46 = Decomposer46 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple47 = Decomposer47 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple48 = Decomposer48 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple49 = Decomposer49 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple5 = Decomposer5 ( 'Proxy :: Proxy (((), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple50 = Decomposer50 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple51 = Decomposer51 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple52 = Decomposer52 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple53 = Decomposer53 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple54 = Decomposer54 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple55 = Decomposer55 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple56 = Decomposer56 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple57 = Decomposer57 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple58 = Decomposer58 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple59 = Decomposer59 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple6 = Decomposer6 ( 'Proxy :: Proxy (((), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple60 = Decomposer60 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple61 = Decomposer61 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple62 = Decomposer62 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple7 = Decomposer7 ( 'Proxy :: Proxy (((), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple8 = Decomposer8 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), ()) :: Constraint))
+ Data.Tuple.Constraint.TypeSynonym: type CTuple9 = Decomposer9 ( 'Proxy :: Proxy (((), (), (), (), (), (), (), (), ()) :: Constraint))
- Data.Tuple.Constraint.ClassNewtype: class CTuple0
+ Data.Tuple.Constraint.ClassNewtype: class (() :: Constraint) => CTuple0

Files

CHANGELOG.md view
@@ -1,3 +1,10 @@+### 0.1.2 [2019.11.24]+* Introduce the `Data.Tuple.Constraint.{TypeFamily,TypeSynonym}` modules that+  provide ways of directly accessing constraint tuple type constructors through+  various means of type-level trickery.+* Make `Data.Tuple.Constraint.ClassNewtype.CTuple0` actually be a class+  newtype.+ ### 0.1.1 [2019.10.21] * Split `generator-script` out of the main `.cabal` file, as it is only used   for development purposes.
GenCTuples.sh view
@@ -1,4 +1,6 @@ #!/bin/bash  cabal v2-run generator-script -v0 -- -o src/Data/Tuple/Constraint.hs-cabal v2-run generator-script -v0 -- -o src/Data/Tuple/Constraint/ClassNewtype.hs --class-newtype+cabal v2-run generator-script -v0 -- -o src/Data/Tuple/Constraint/ClassNewtype.hs --mode ClassNewtype+cabal v2-run generator-script -v0 -- -o src/Data/Tuple/Constraint/TypeFamily.hs   --mode TypeFamily+cabal v2-run generator-script -v0 -- -o src/Data/Tuple/Constraint/TypeSynonym.hs  --mode TypeSynonym
README.md view
@@ -15,14 +15,23 @@   https://tldrlegal.com/license/bsd-3-clause-license-%28revised%29   "BSD 3-Clause License (Revised)" -This library provides classes that emulate the behavior of GHC's constraint-tuple syntax. Unlike GHC's built-in constraint tuples, the classes in this-library can be partially applied.+This library provides classes and type aliases that emulate the behavior of+GHC's constraint tuple syntax. Unlike GHC's built-in constraint tuples, the+types in this library can be partially applied. -This library exposes two different modules that are semantically identical, but-compile to slightly different Core:+This library exposes four different modules that provide essentially the same+API with slight differences in their implementation:  * `Data.Tuple.Constraint`: A `CTupleN` class compiles to a dictionary data type    with `N` fields. * `Data.Tuple.Constraint.ClassNewtype`: A `CTupleN` class compiles to a newtype    around the corresponding built-in constraint tuple type with `N` arguments.+* `Data.Tuple.Constraint.TypeFamily`: A `CTupleN` type alias is a constraint+  tuple type constructor with `N` arguments obtained by way of a type family.+  This will compile to a built-in constraint tuple, but casted with a+  type family axiom.+* `Data.Tuple.Constraint.TypeSynonym`: A `CTupleN` type alias is a constraint+  tuple type constructor with `N` arguments obtained by way of a type synonym.+  This will compile directly to a built-in constraint tuple, but because this+  requires use of GHC features only present on 8.0 or later, this module does+  not export anything on earlier versions of GHC.
constraint-tuples.cabal view
@@ -1,15 +1,15 @@ cabal-version:       >=1.10 name:                constraint-tuples-version:             0.1.1+version:             0.1.2 synopsis:            Partially applicable constraint tuples-description:         This library provides classes that emulate the behavior of-                     GHC's constraint tuple syntax. Unlike GHC's built-in-                     constraint tuples, the classes in this library can be-                     partially applied.+description:         This library provides classes and type aliases that+                     emulate the behavior of GHC's constraint tuple syntax.+                     Unlike GHC's built-in constraint tuples, the types in this+                     library can be partially applied.                      .-                     This library exposes two different modules that are-                     semantically identical, but compile to slightly different-                     Core:+                     This library exposes four different modules that provide+                     essentially the same API with slight differences in their+                     implementation:                      .                      * "Data.Tuple.Constraint": A @CTupleN@ class compiles to                        a dictionary data type with @N@ fields.@@ -17,6 +17,20 @@                      * "Data.Tuple.Constraint.ClassNewtype": A @CTupleN@ class                        compiles to a newtype around the corresponding built-in                        constraint tuple type with @N@ arguments.+                     .+                     * @Data.Tuple.Constraint.TypeFamily@: A @CTupleN@ type+                       alias is a constraint tuple type constructor with @N@+                       arguments obtained by way of a type family. This will+                       compile to a built-in constraint tuple, but casted with+                       a type family axiom.+                     .+                     * @Data.Tuple.Constraint.TypeSynonym@: A @CTupleN@ type+                       alias is a constraint tuple type constructor with @N@+                       arguments obtained by way of a type synonym. This will+                       compile directly to a built-in constraint tuple, but+                       because this requires use of GHC features only present+                       on 8.0 or later, this module does not export anything on+                       earlier versions of GHC. homepage:            https://github.com/RyanGlScott/constraint-tuples bug-reports:         https://github.com/RyanGlScott/constraint-tuples/issues license:             BSD3@@ -49,6 +63,8 @@ library   exposed-modules:     Data.Tuple.Constraint                        Data.Tuple.Constraint.ClassNewtype+                       Data.Tuple.Constraint.TypeFamily+                       Data.Tuple.Constraint.TypeSynonym   build-depends:       base >= 4.6 && < 5   hs-source-dirs:      src   default-language:    Haskell2010
generator-script/exe/GeneratorScript.hs view
@@ -11,10 +11,17 @@ import Options.Applicative  data Args = Args-  { output       :: FilePath-  , classNewtype :: Bool-  } deriving Show+  { output :: FilePath+  , mode   :: Mode+  } deriving (Eq, Ord, Show) +data Mode+  = Default+  | ClassNewtype+  | TypeFamily+  | TypeSynonym+  deriving (Bounded, Enum, Eq, Ord, Read, Show)+ argsParser :: Parser Args argsParser = Args   <$> strOption@@ -22,9 +29,13 @@       <> short 'o'       <> metavar "PATH"       <> help "The file to which to write the source code" )-  <*> switch-      (  long "class-newtype"-      <> help "Generate the source code for Data.Tuple.Constraint.ClassNewtype" )+  <*> option auto+      (  long "mode"+      <> short 'm'+      <> value Default+      <> help (unlines [ "Which version of Data.Tuple.Constraint should be generated?"+                       , "(" ++ intercalate ", " (map show [minBound..maxBound :: Mode]) ++ ")"+                       ]) )  main :: IO () main = execParser opts >>= generate@@ -34,161 +45,300 @@      <> progDesc spiel      <> header spiel ) -    spiel = "Generate the source code for Data.Tuple.Constraint{,.ClassNewtype}"+    spiel = "Generate the source code for Data.Tuple.Constraint and friends"  generate :: Args -> IO () generate args@Args{output} =   let sourceCode = unlines $ preamble args ++ decs args in   writeFile output sourceCode -genCTuple :: Args -> Int -> String-genCTuple Args{classNewtype} n-  | n == 0    = "CTuple0"-  | otherwise = parens (concat (intersperse ", " cNums))-             ++ " => CTuple" ++ show n ++ " " ++ unwords cNums+genClassDef :: Bool -> Int -> String+genClassDef classNewtype n =+     parens (concat (intersperse ", " cNums))+  ++ " => CTuple" ++ show n+  ++ [ ' ' | n > 0 ]+  ++ unwords cNums   where     parens :: String -> String     parens s | n == 1    = s              | otherwise = kindSig $ "(" ++ s ++ ")"      kindSig :: String -> String-    kindSig s | classNewtype = "(" ++ s ++ " :: Constraint)"-              | otherwise    = s+    kindSig s+      | classNewtype = "(" ++ s ++ " :: Constraint)"+      | otherwise    = s      cNums :: [String]-    cNums = ['c':show i | i <- [1..n]]+    cNums = mkVars n -haddocks :: Int -> [String]-haddocks i =+genTypeFamilyDecomposers :: Int -> [String]+genTypeFamilyDecomposers n =+  [ "type family   Decomposer" ++ show n ++ " (x :: Constraint) :: " ++ resKind n+  , "type instance Decomposer" ++ show n ++ " (f " ++ unwords (mkVars n) ++ ") = f"+  ]++genTypeSynonymDecomposer :: Int -> String+genTypeSynonymDecomposer n =+  "type Decomposer" ++ show n ++ " (x :: Proxy ((f :: " ++ resKind n ++ ") " ++ unwords (mkVars n) ++ ")) = f"++resKind :: Int -> String+resKind n = concat $ intersperse " -> " $ replicate (n+1) "Constraint"++genAlias :: Bool -- True for type families, False for type synonyms+         -> Int -> String+genAlias typeFams i =+     "type CTuple"+  ++ show i ++ " = Decomposer"+  ++ show i ++ " (" ++ arg ++ ")"+  where+    arg :: String+    arg | typeFams  = dummyClass+        | otherwise = "'Proxy :: Proxy (" ++ dummyClass ++ ")"++    dummyClass :: String+    dummyClass = "("+              ++ concat (intersperse ", " $ replicate i "()")+              ++ ") :: Constraint"++mkVars :: Int -> [String]+mkVars n = ['c':show i | i <- [1..n]]++classDefHaddocks :: Int -> [String]+classDefHaddocks i =   [ "-- | A constraint tuple class with " ++ show i ++-    " argument" ++ pluralSuffix ++ "."+    " argument" ++ pluralSuffix i ++ "."   ] ++   if i == 0   then [ "--"        , "-- This class is only defined on GHC 7.8 or later."        ]   else []-  where-    pluralSuffix :: String-    pluralSuffix | i == 1-                 = ""-                 | otherwise-                 = "s" +aliasHaddocks :: Int -> String+aliasHaddocks i =+  "-- | A type alias for a constraint tuple with " ++ show i +++  " argument" ++ pluralSuffix i ++ "."++pluralSuffix :: Int -> String+pluralSuffix i | i == 1+               = ""+               | otherwise+               = "s"+ preamble :: Args -> [String]-preamble Args{classNewtype} =+preamble Args{mode} =   [ "{-# LANGUAGE ConstraintKinds #-}"   , "{-# LANGUAGE CPP #-}"-  , "{-# LANGUAGE FlexibleInstances #-}"   , "{-# LANGUAGE KindSignatures #-}"-  , "{-# LANGUAGE MultiParamTypeClasses #-}"-  , "{-# LANGUAGE UndecidableInstances #-}"-  , "#if __GLASGOW_HASKELL__ >= 708 && __GLASGOW_HASKELL__ < 710"-  , "{-# LANGUAGE NullaryTypeClasses #-}"-  , "#endif"-  , "#if __GLASGOW_HASKELL__ >= 800"-  , "{-# LANGUAGE UndecidableSuperClasses #-}"-  , "#endif"-  ] ++ safeHaskell ++-  [ "-- | This module provides classes that emulate the behavior of GHC's constraint"-  , "-- tuple syntax. Unlike GHC's built-in constraint tuples, the classes in this"+  ] ++ case mode of+         Default      -> classDefExts+         ClassNewtype -> classDefExts+         TypeFamily   -> [ "{-# LANGUAGE TypeFamilies #-}" ]+         TypeSynonym  -> [ "#if __GLASGOW_HASKELL__ >= 800"+                         , "{-# LANGUAGE DataKinds #-}"+                         , "{-# LANGUAGE PolyKinds #-}"+                         , "# if __GLASGOW_HASKELL__ < 806"+                         , "{-# LANGUAGE TypeInType #-}"+                         , "# endif"+                         , "#endif"+                         ]+    ++ safeHaskell +++  [ ""+  , "-- | This module provides " ++ things ++ " that emulate the behavior of GHC's constraint"+  , "-- tuple syntax. Unlike GHC's built-in constraint tuples, the " ++ things ++ " in this"   , "-- library can be partially applied."-  , "--"   ] ++ haddockNote ++   [ "module " ++ modName-  , "  ( -- * Constraint tuples"   ] ++ exports ++-  [ "  ) where"-  , ""+  [ ""   ] ++ imports   where+    classDefExts :: [String]+    classDefExts =+      [ "{-# LANGUAGE FlexibleInstances #-}"+      , "{-# LANGUAGE MultiParamTypeClasses #-}"+      , "{-# LANGUAGE UndecidableInstances #-}"+      , "#if __GLASGOW_HASKELL__ >= 708 && __GLASGOW_HASKELL__ < 710"+      , "{-# LANGUAGE NullaryTypeClasses #-}"+      , "#endif"+      , "#if __GLASGOW_HASKELL__ >= 800"+      , "{-# LANGUAGE UndecidableSuperClasses #-}"+      , "#endif"+      ]++    things :: String+    things = case mode of+               Default      -> "classes"+               ClassNewtype -> "classes"+               TypeFamily   -> "type aliases"+               TypeSynonym  -> "type aliases"+     modName :: String     modName = "Data.Tuple.Constraint" ++-              if classNewtype then ".ClassNewtype" else ""+              case mode of+                Default -> ""+                _       -> '.' : show mode      exports :: [String]-    exports = flip concatMap [0..maxTupleSize] $ \i ->-                case i of-                  0 -> [ "#if __GLASGOW_HASKELL__ >= 708"-                       , "    CTuple0,"-                       , "#endif"-                       ]-                  1 -> [ "    CTuple1" ]-                  _ -> [ "  , CTuple" ++ show i ]+    exports =+      concat+        [ if mode == TypeSynonym+          then [ "#if __GLASGOW_HASKELL__ < 800"+               , "  () where"+               , "#else"+               ]+          else []+        , [ "  ( -- * Constraint tuples"+          ] ++ cTupleExports +++          [ "  ) where" ]+        ] +    cTupleExports :: [String]+    cTupleExports =+      flip concatMap [0..maxTupleSize] $ \i ->+        case i of+          0 ->+               if mode `elem` classDefModes+               then [ "#if __GLASGOW_HASKELL__ >= 708"+                    , "    CTuple0,"+                    , "#endif"+                    ]+               else [ "    CTuple0" ]+          1 |  mode `elem` classDefModes+            -> [ "    CTuple1" ]+          _ -> [ "  , CTuple" ++ show i ]+      where+        classDefModes :: [Mode]+        classDefModes = [Default, ClassNewtype]+     imports :: [String]-    imports | classNewtype-            = [ "import Data.Tuple.Constraint ( CTuple1"-              , "#if __GLASGOW_HASKELL__ >= 708"-              , "                             , CTuple0"-              , "#endif"-              , "                             )"-              , "#if __GLASGOW_HASKELL__ >= 800"-              , "import Data.Kind (Constraint)"-              , "#else"-              , "import GHC.Exts (Constraint)"-              , "#endif"-              , ""-              ]-            | otherwise-            = []+    imports =+      case mode of+        Default      -> []+        ClassNewtype -> constraintImports+        TypeFamily   -> constraintImports+        TypeSynonym  -> [ cTuple1Import+                        , "import Data.Kind (Constraint)"+                        , "import Data.Proxy (Proxy(..))"+                        , ""+                        ] +    constraintImports :: [String]+    constraintImports =+      [ cTuple1Import+      , "#if __GLASGOW_HASKELL__ >= 800"+      , "import Data.Kind (Constraint)"+      , "#else"+      , "import GHC.Exts (Constraint)"+      , "#endif"+      , ""+      ]++    cTuple1Import :: String+    cTuple1Import = "import Data.Tuple.Constraint (CTuple1)"+     safeHaskell :: [String]-    safeHaskell | classNewtype-                = [ "#if __GLASGOW_HASKELL__ >= 800"-                  , "{-# LANGUAGE Safe #-}"-                  , "#else"-                  , "{-# LANGUAGE Trustworthy #-}"-                  , "#endif"-                  ]-                | otherwise-                = [ "{-# LANGUAGE Safe #-}" ]+    safeHaskell =+      case mode of+        Default      -> [ safe ]+        ClassNewtype -> safeOn8'0OrLater+        TypeFamily   -> safeOn8'0OrLater+        TypeSynonym  -> [ safe ] +    safe :: String+    safe = "{-# LANGUAGE Safe #-}"++    safeOn8'0OrLater :: [String]+    safeOn8'0OrLater =+      [ "#if __GLASGOW_HASKELL__ >= 800"+      , safe+      , "#else"+      , "{-# LANGUAGE Trustworthy #-}"+      , "#endif"+      ]+     haddockNote :: [String]-    haddockNote-      | classNewtype-      = [ "-- Unlike \"Data.Tuple.Constraint\", a @CTupleN@ class defined in this module"-        , "-- (where @N@ is greater than 1) compiles to a newtype around the corresponding"-        , "-- built-in constraint tuple type with @N@ arguments in Core. In contrast, a"-        , "-- @CTupleN@ class defined in \"Data.Tuple.Constraint\" compiles to a"-        , "-- dictionary data type with @N@ fields in Core."-        , "--"-        , "-- For most use cases, this distinction is of no practical consequence. One"-        , "-- scenario where you may benefit from using this module is when you are"-        , "-- interoperating with built-in constraint tuple syntax."-        , "-- For example, in this code:"-        , "--"-        , "-- @"-        , "-- data Dict :: Constraint -> Type where"-        , "--   Dict :: c => Dict c"-        , "--"-        , "-- foo :: CTuple2 a b => Dict (a, b)"-        , "-- foo = Dict"-        , "-- @"-        , "--"-        , "-- If you use the @CTuple2@ class from \"Data.Tuple.Constraint\" to define"-        , "-- @foo@, then in the Core for @foo@, the @a@ and @b@ must be extracted from"-        , "-- the @CTuple2@ dictionary before building the @Dict@ dictionary. On the other"-        , "-- hand, if you use the @CTuple@ class from this module, then no such"-        , "-- extraction is necessary, as the Core can simply cast the @CTuple2@"-        , "-- dictionary (which is a newtype) to the @(a, b)@ dictionary and use that to"-        , "-- construct a @Dict@ dictionary."-        ]-      | otherwise-      = []+    haddockNote =+      case mode of+        Default ->+          []+        ClassNewtype ->+          [ "--"+          , "-- Unlike \"Data.Tuple.Constraint\", a @CTupleN@ class defined in this module"+          , "-- (where @N@ is greater than 1) compiles to a newtype around the corresponding"+          , "-- built-in constraint tuple type with @N@ arguments in Core. In contrast, a"+          , "-- @CTupleN@ class defined in \"Data.Tuple.Constraint\" compiles to a"+          , "-- dictionary data type with @N@ fields in Core."+          , "--"+          , "-- For most use cases, this distinction is of no practical consequence. One"+          , "-- scenario where you may benefit from using this module is when you are"+          , "-- interoperating with built-in constraint tuple syntax."+          , "-- For example, in this code:"+          , "--"+          , "-- @"+          , "-- data Dict :: Constraint -> Type where"+          , "--   Dict :: c => Dict c"+          , "--"+          , "-- foo :: CTuple2 a b => Dict (a, b)"+          , "-- foo = Dict"+          , "-- @"+          , "--"+          , "-- If you use the @CTuple2@ class from \"Data.Tuple.Constraint\" to define"+          , "-- @foo@, then in the Core for @foo@, the @a@ and @b@ must be extracted from"+          , "-- the @CTuple2@ dictionary before building the @Dict@ dictionary. On the other"+          , "-- hand, if you use the @CTuple@ class from this module, then no such"+          , "-- extraction is necessary, as the Core can simply cast the @CTuple2@"+          , "-- dictionary (which is a newtype) to the @(a, b)@ dictionary and use that to"+          , "-- construct a @Dict@ dictionary."+          ]+        TypeFamily  -> aliasNote True+        TypeSynonym -> aliasNote False +    aliasNote :: Bool -- True for type families, False for type synonyms+              -> [String]+    aliasNote typeFams =+      [ "--"+      , "-- The type aliases in this module are defined by way of "+          ++ if typeFams then "type families" else "type synonyms" ++ " that"+      , "-- decompose applications of constraint tuple type constructors to their arguments."+      ] +++      if typeFams+      then []+      else [ "-- This requires the use of GHC capabilities that are only present on GHC 8.0 or"+           , "-- later, so this module does not export anything on earlier versions of GHC."+           ]+ decs :: Args -> [String]-decs args@Args{classNewtype} =-  flip concatMap [0..maxTupleSize] $ \i ->-    let cTuple = genCTuple args i in-    if classNewtype && (i == 0 || i == 1)-       then [] -- CTuple{0,1} are imported from Data.Tuple.Constraint-       else concat-              [ [ "#if __GLASGOW_HASKELL__ >= 708" | i == 0 ]-              , haddocks i-              , [ "class    " ++ cTuple-                , "instance " ++ cTuple-                ]-              , [ "#endif" | i == 0 ]-              , [ "" ]-              ]+decs Args{mode} =+  flip concatMap [0..maxTupleSize] (\i ->+    if mode /= Default && i == 1+    then [] -- CTuple1 is imported from Data.Tuple.Constraint+    else case mode of+           Default      -> genClassDefs False i+           ClassNewtype -> genClassDefs True  i+           TypeFamily   -> genAliasDefs True  i+           TypeSynonym  -> genAliasDefs False i+         ++ [ "" ])+  ++ [ "#endif" | mode == TypeSynonym ]+  where+    genClassDefs :: Bool -- Should the classes be newtypes?+                 -> Int -> [String]+    genClassDefs classNewtype i =+      let cTuple = genClassDef classNewtype i in+      concat+        [ [ "#if __GLASGOW_HASKELL__ >= 708" | i == 0 ]+        , classDefHaddocks i+        , [ "class    " ++ cTuple+          , "instance " ++ cTuple+          ]+        , [ "#endif" | i == 0 ]+        ]++    genAliasDefs :: Bool -- True for type families, False for type synonyms+                 -> Int -> [String]+    genAliasDefs typeFams i =+        aliasHaddocks i+      : genAlias typeFams i+      : if typeFams+           then   genTypeFamilyDecomposers i+           else [ genTypeSynonymDecomposer i ]
src/Data/Tuple/Constraint.hs view
@@ -1,7 +1,7 @@ {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE CPP #-}-{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE KindSignatures #-}+{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE UndecidableInstances #-} #if __GLASGOW_HASKELL__ >= 708 && __GLASGOW_HASKELL__ < 710@@ -11,10 +11,10 @@ {-# LANGUAGE UndecidableSuperClasses #-} #endif {-# LANGUAGE Safe #-}+ -- | This module provides classes that emulate the behavior of GHC's constraint -- tuple syntax. Unlike GHC's built-in constraint tuples, the classes in this -- library can be partially applied.--- module Data.Tuple.Constraint   ( -- * Constraint tuples #if __GLASGOW_HASKELL__ >= 708@@ -88,8 +88,8 @@ -- | A constraint tuple class with 0 arguments. -- -- This class is only defined on GHC 7.8 or later.-class    CTuple0-instance CTuple0+class    () => CTuple0+instance () => CTuple0 #endif  -- | A constraint tuple class with 1 argument.
src/Data/Tuple/Constraint/ClassNewtype.hs view
@@ -1,7 +1,7 @@ {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE CPP #-}-{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE KindSignatures #-}+{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE UndecidableInstances #-} #if __GLASGOW_HASKELL__ >= 708 && __GLASGOW_HASKELL__ < 710@@ -15,6 +15,7 @@ #else {-# LANGUAGE Trustworthy #-} #endif+ -- | This module provides classes that emulate the behavior of GHC's constraint -- tuple syntax. Unlike GHC's built-in constraint tuples, the classes in this -- library can be partially applied.@@ -114,15 +115,19 @@   , CTuple62   ) where -import Data.Tuple.Constraint ( CTuple1-#if __GLASGOW_HASKELL__ >= 708-                             , CTuple0-#endif-                             )+import Data.Tuple.Constraint (CTuple1) #if __GLASGOW_HASKELL__ >= 800 import Data.Kind (Constraint) #else import GHC.Exts (Constraint)+#endif++#if __GLASGOW_HASKELL__ >= 708+-- | A constraint tuple class with 0 arguments.+--+-- This class is only defined on GHC 7.8 or later.+class    (() :: Constraint) => CTuple0+instance (() :: Constraint) => CTuple0 #endif  -- | A constraint tuple class with 2 arguments.
+ src/Data/Tuple/Constraint/TypeFamily.hs view
@@ -0,0 +1,400 @@+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE KindSignatures #-}+{-# LANGUAGE TypeFamilies #-}+#if __GLASGOW_HASKELL__ >= 800+{-# LANGUAGE Safe #-}+#else+{-# LANGUAGE Trustworthy #-}+#endif++-- | This module provides type aliases that emulate the behavior of GHC's constraint+-- tuple syntax. Unlike GHC's built-in constraint tuples, the type aliases in this+-- library can be partially applied.+--+-- The type aliases in this module are defined by way of type families+-- decompose applications of constraint tuple type constructors to their arguments.+module Data.Tuple.Constraint.TypeFamily+  ( -- * Constraint tuples+    CTuple0+  , CTuple1+  , CTuple2+  , CTuple3+  , CTuple4+  , CTuple5+  , CTuple6+  , CTuple7+  , CTuple8+  , CTuple9+  , CTuple10+  , CTuple11+  , CTuple12+  , CTuple13+  , CTuple14+  , CTuple15+  , CTuple16+  , CTuple17+  , CTuple18+  , CTuple19+  , CTuple20+  , CTuple21+  , CTuple22+  , CTuple23+  , CTuple24+  , CTuple25+  , CTuple26+  , CTuple27+  , CTuple28+  , CTuple29+  , CTuple30+  , CTuple31+  , CTuple32+  , CTuple33+  , CTuple34+  , CTuple35+  , CTuple36+  , CTuple37+  , CTuple38+  , CTuple39+  , CTuple40+  , CTuple41+  , CTuple42+  , CTuple43+  , CTuple44+  , CTuple45+  , CTuple46+  , CTuple47+  , CTuple48+  , CTuple49+  , CTuple50+  , CTuple51+  , CTuple52+  , CTuple53+  , CTuple54+  , CTuple55+  , CTuple56+  , CTuple57+  , CTuple58+  , CTuple59+  , CTuple60+  , CTuple61+  , CTuple62+  ) where++import Data.Tuple.Constraint (CTuple1)+#if __GLASGOW_HASKELL__ >= 800+import Data.Kind (Constraint)+#else+import GHC.Exts (Constraint)+#endif++-- | A type alias for a constraint tuple with 0 arguments.+type CTuple0 = Decomposer0 (() :: Constraint)+type family   Decomposer0 (x :: Constraint) :: Constraint+type instance Decomposer0 (f ) = f++-- | A type alias for a constraint tuple with 2 arguments.+type CTuple2 = Decomposer2 (((), ()) :: Constraint)+type family   Decomposer2 (x :: Constraint) :: Constraint -> Constraint -> Constraint+type instance Decomposer2 (f c1 c2) = f++-- | A type alias for a constraint tuple with 3 arguments.+type CTuple3 = Decomposer3 (((), (), ()) :: Constraint)+type family   Decomposer3 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer3 (f c1 c2 c3) = f++-- | A type alias for a constraint tuple with 4 arguments.+type CTuple4 = Decomposer4 (((), (), (), ()) :: Constraint)+type family   Decomposer4 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer4 (f c1 c2 c3 c4) = f++-- | A type alias for a constraint tuple with 5 arguments.+type CTuple5 = Decomposer5 (((), (), (), (), ()) :: Constraint)+type family   Decomposer5 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer5 (f c1 c2 c3 c4 c5) = f++-- | A type alias for a constraint tuple with 6 arguments.+type CTuple6 = Decomposer6 (((), (), (), (), (), ()) :: Constraint)+type family   Decomposer6 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer6 (f c1 c2 c3 c4 c5 c6) = f++-- | A type alias for a constraint tuple with 7 arguments.+type CTuple7 = Decomposer7 (((), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer7 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer7 (f c1 c2 c3 c4 c5 c6 c7) = f++-- | A type alias for a constraint tuple with 8 arguments.+type CTuple8 = Decomposer8 (((), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer8 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer8 (f c1 c2 c3 c4 c5 c6 c7 c8) = f++-- | A type alias for a constraint tuple with 9 arguments.+type CTuple9 = Decomposer9 (((), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer9 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer9 (f c1 c2 c3 c4 c5 c6 c7 c8 c9) = f++-- | A type alias for a constraint tuple with 10 arguments.+type CTuple10 = Decomposer10 (((), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer10 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer10 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10) = f++-- | A type alias for a constraint tuple with 11 arguments.+type CTuple11 = Decomposer11 (((), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer11 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer11 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11) = f++-- | A type alias for a constraint tuple with 12 arguments.+type CTuple12 = Decomposer12 (((), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer12 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer12 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12) = f++-- | A type alias for a constraint tuple with 13 arguments.+type CTuple13 = Decomposer13 (((), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer13 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer13 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13) = f++-- | A type alias for a constraint tuple with 14 arguments.+type CTuple14 = Decomposer14 (((), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer14 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer14 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14) = f++-- | A type alias for a constraint tuple with 15 arguments.+type CTuple15 = Decomposer15 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer15 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer15 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15) = f++-- | A type alias for a constraint tuple with 16 arguments.+type CTuple16 = Decomposer16 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer16 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer16 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16) = f++-- | A type alias for a constraint tuple with 17 arguments.+type CTuple17 = Decomposer17 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer17 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer17 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17) = f++-- | A type alias for a constraint tuple with 18 arguments.+type CTuple18 = Decomposer18 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer18 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer18 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18) = f++-- | A type alias for a constraint tuple with 19 arguments.+type CTuple19 = Decomposer19 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer19 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer19 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19) = f++-- | A type alias for a constraint tuple with 20 arguments.+type CTuple20 = Decomposer20 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer20 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer20 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20) = f++-- | A type alias for a constraint tuple with 21 arguments.+type CTuple21 = Decomposer21 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer21 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer21 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21) = f++-- | A type alias for a constraint tuple with 22 arguments.+type CTuple22 = Decomposer22 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer22 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer22 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22) = f++-- | A type alias for a constraint tuple with 23 arguments.+type CTuple23 = Decomposer23 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer23 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer23 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23) = f++-- | A type alias for a constraint tuple with 24 arguments.+type CTuple24 = Decomposer24 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer24 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer24 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24) = f++-- | A type alias for a constraint tuple with 25 arguments.+type CTuple25 = Decomposer25 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer25 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer25 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25) = f++-- | A type alias for a constraint tuple with 26 arguments.+type CTuple26 = Decomposer26 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer26 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer26 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26) = f++-- | A type alias for a constraint tuple with 27 arguments.+type CTuple27 = Decomposer27 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer27 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer27 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27) = f++-- | A type alias for a constraint tuple with 28 arguments.+type CTuple28 = Decomposer28 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer28 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer28 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28) = f++-- | A type alias for a constraint tuple with 29 arguments.+type CTuple29 = Decomposer29 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer29 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer29 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29) = f++-- | A type alias for a constraint tuple with 30 arguments.+type CTuple30 = Decomposer30 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer30 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer30 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30) = f++-- | A type alias for a constraint tuple with 31 arguments.+type CTuple31 = Decomposer31 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer31 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer31 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31) = f++-- | A type alias for a constraint tuple with 32 arguments.+type CTuple32 = Decomposer32 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer32 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer32 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32) = f++-- | A type alias for a constraint tuple with 33 arguments.+type CTuple33 = Decomposer33 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer33 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer33 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33) = f++-- | A type alias for a constraint tuple with 34 arguments.+type CTuple34 = Decomposer34 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer34 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer34 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34) = f++-- | A type alias for a constraint tuple with 35 arguments.+type CTuple35 = Decomposer35 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer35 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer35 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35) = f++-- | A type alias for a constraint tuple with 36 arguments.+type CTuple36 = Decomposer36 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer36 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer36 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36) = f++-- | A type alias for a constraint tuple with 37 arguments.+type CTuple37 = Decomposer37 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer37 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer37 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37) = f++-- | A type alias for a constraint tuple with 38 arguments.+type CTuple38 = Decomposer38 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer38 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer38 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38) = f++-- | A type alias for a constraint tuple with 39 arguments.+type CTuple39 = Decomposer39 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer39 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer39 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39) = f++-- | A type alias for a constraint tuple with 40 arguments.+type CTuple40 = Decomposer40 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer40 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer40 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40) = f++-- | A type alias for a constraint tuple with 41 arguments.+type CTuple41 = Decomposer41 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer41 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer41 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41) = f++-- | A type alias for a constraint tuple with 42 arguments.+type CTuple42 = Decomposer42 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer42 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer42 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42) = f++-- | A type alias for a constraint tuple with 43 arguments.+type CTuple43 = Decomposer43 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer43 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer43 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43) = f++-- | A type alias for a constraint tuple with 44 arguments.+type CTuple44 = Decomposer44 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer44 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer44 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44) = f++-- | A type alias for a constraint tuple with 45 arguments.+type CTuple45 = Decomposer45 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer45 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer45 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45) = f++-- | A type alias for a constraint tuple with 46 arguments.+type CTuple46 = Decomposer46 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer46 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer46 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46) = f++-- | A type alias for a constraint tuple with 47 arguments.+type CTuple47 = Decomposer47 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer47 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer47 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47) = f++-- | A type alias for a constraint tuple with 48 arguments.+type CTuple48 = Decomposer48 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer48 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer48 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48) = f++-- | A type alias for a constraint tuple with 49 arguments.+type CTuple49 = Decomposer49 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer49 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer49 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49) = f++-- | A type alias for a constraint tuple with 50 arguments.+type CTuple50 = Decomposer50 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer50 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer50 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50) = f++-- | A type alias for a constraint tuple with 51 arguments.+type CTuple51 = Decomposer51 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer51 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer51 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51) = f++-- | A type alias for a constraint tuple with 52 arguments.+type CTuple52 = Decomposer52 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer52 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer52 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52) = f++-- | A type alias for a constraint tuple with 53 arguments.+type CTuple53 = Decomposer53 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer53 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer53 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53) = f++-- | A type alias for a constraint tuple with 54 arguments.+type CTuple54 = Decomposer54 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer54 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer54 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54) = f++-- | A type alias for a constraint tuple with 55 arguments.+type CTuple55 = Decomposer55 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer55 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer55 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55) = f++-- | A type alias for a constraint tuple with 56 arguments.+type CTuple56 = Decomposer56 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer56 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer56 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55 c56) = f++-- | A type alias for a constraint tuple with 57 arguments.+type CTuple57 = Decomposer57 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer57 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer57 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55 c56 c57) = f++-- | A type alias for a constraint tuple with 58 arguments.+type CTuple58 = Decomposer58 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer58 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer58 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55 c56 c57 c58) = f++-- | A type alias for a constraint tuple with 59 arguments.+type CTuple59 = Decomposer59 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer59 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer59 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55 c56 c57 c58 c59) = f++-- | A type alias for a constraint tuple with 60 arguments.+type CTuple60 = Decomposer60 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer60 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer60 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55 c56 c57 c58 c59 c60) = f++-- | A type alias for a constraint tuple with 61 arguments.+type CTuple61 = Decomposer61 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer61 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer61 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55 c56 c57 c58 c59 c60 c61) = f++-- | A type alias for a constraint tuple with 62 arguments.+type CTuple62 = Decomposer62 (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint)+type family   Decomposer62 (x :: Constraint) :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint+type instance Decomposer62 (f c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55 c56 c57 c58 c59 c60 c61 c62) = f+
+ src/Data/Tuple/Constraint/TypeSynonym.hs view
@@ -0,0 +1,343 @@+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE KindSignatures #-}+#if __GLASGOW_HASKELL__ >= 800+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE PolyKinds #-}+# if __GLASGOW_HASKELL__ < 806+{-# LANGUAGE TypeInType #-}+# endif+#endif+{-# LANGUAGE Safe #-}++-- | This module provides type aliases that emulate the behavior of GHC's constraint+-- tuple syntax. Unlike GHC's built-in constraint tuples, the type aliases in this+-- library can be partially applied.+--+-- The type aliases in this module are defined by way of type synonyms that+-- decompose applications of constraint tuple type constructors to their arguments.+-- This requires the use of GHC capabilities that are only present on GHC 8.0 or+-- later, so this module does not export anything on earlier versions of GHC.+module Data.Tuple.Constraint.TypeSynonym+#if __GLASGOW_HASKELL__ < 800+  () where+#else+  ( -- * Constraint tuples+    CTuple0+  , CTuple1+  , CTuple2+  , CTuple3+  , CTuple4+  , CTuple5+  , CTuple6+  , CTuple7+  , CTuple8+  , CTuple9+  , CTuple10+  , CTuple11+  , CTuple12+  , CTuple13+  , CTuple14+  , CTuple15+  , CTuple16+  , CTuple17+  , CTuple18+  , CTuple19+  , CTuple20+  , CTuple21+  , CTuple22+  , CTuple23+  , CTuple24+  , CTuple25+  , CTuple26+  , CTuple27+  , CTuple28+  , CTuple29+  , CTuple30+  , CTuple31+  , CTuple32+  , CTuple33+  , CTuple34+  , CTuple35+  , CTuple36+  , CTuple37+  , CTuple38+  , CTuple39+  , CTuple40+  , CTuple41+  , CTuple42+  , CTuple43+  , CTuple44+  , CTuple45+  , CTuple46+  , CTuple47+  , CTuple48+  , CTuple49+  , CTuple50+  , CTuple51+  , CTuple52+  , CTuple53+  , CTuple54+  , CTuple55+  , CTuple56+  , CTuple57+  , CTuple58+  , CTuple59+  , CTuple60+  , CTuple61+  , CTuple62+  ) where++import Data.Tuple.Constraint (CTuple1)+import Data.Kind (Constraint)+import Data.Proxy (Proxy(..))++-- | A type alias for a constraint tuple with 0 arguments.+type CTuple0 = Decomposer0 ('Proxy :: Proxy (() :: Constraint))+type Decomposer0 (x :: Proxy ((f :: Constraint) )) = f++-- | A type alias for a constraint tuple with 2 arguments.+type CTuple2 = Decomposer2 ('Proxy :: Proxy (((), ()) :: Constraint))+type Decomposer2 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint) c1 c2)) = f++-- | A type alias for a constraint tuple with 3 arguments.+type CTuple3 = Decomposer3 ('Proxy :: Proxy (((), (), ()) :: Constraint))+type Decomposer3 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3)) = f++-- | A type alias for a constraint tuple with 4 arguments.+type CTuple4 = Decomposer4 ('Proxy :: Proxy (((), (), (), ()) :: Constraint))+type Decomposer4 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4)) = f++-- | A type alias for a constraint tuple with 5 arguments.+type CTuple5 = Decomposer5 ('Proxy :: Proxy (((), (), (), (), ()) :: Constraint))+type Decomposer5 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5)) = f++-- | A type alias for a constraint tuple with 6 arguments.+type CTuple6 = Decomposer6 ('Proxy :: Proxy (((), (), (), (), (), ()) :: Constraint))+type Decomposer6 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6)) = f++-- | A type alias for a constraint tuple with 7 arguments.+type CTuple7 = Decomposer7 ('Proxy :: Proxy (((), (), (), (), (), (), ()) :: Constraint))+type Decomposer7 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7)) = f++-- | A type alias for a constraint tuple with 8 arguments.+type CTuple8 = Decomposer8 ('Proxy :: Proxy (((), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer8 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8)) = f++-- | A type alias for a constraint tuple with 9 arguments.+type CTuple9 = Decomposer9 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer9 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9)) = f++-- | A type alias for a constraint tuple with 10 arguments.+type CTuple10 = Decomposer10 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer10 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10)) = f++-- | A type alias for a constraint tuple with 11 arguments.+type CTuple11 = Decomposer11 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer11 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11)) = f++-- | A type alias for a constraint tuple with 12 arguments.+type CTuple12 = Decomposer12 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer12 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12)) = f++-- | A type alias for a constraint tuple with 13 arguments.+type CTuple13 = Decomposer13 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer13 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13)) = f++-- | A type alias for a constraint tuple with 14 arguments.+type CTuple14 = Decomposer14 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer14 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14)) = f++-- | A type alias for a constraint tuple with 15 arguments.+type CTuple15 = Decomposer15 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer15 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15)) = f++-- | A type alias for a constraint tuple with 16 arguments.+type CTuple16 = Decomposer16 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer16 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16)) = f++-- | A type alias for a constraint tuple with 17 arguments.+type CTuple17 = Decomposer17 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer17 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17)) = f++-- | A type alias for a constraint tuple with 18 arguments.+type CTuple18 = Decomposer18 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer18 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18)) = f++-- | A type alias for a constraint tuple with 19 arguments.+type CTuple19 = Decomposer19 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer19 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19)) = f++-- | A type alias for a constraint tuple with 20 arguments.+type CTuple20 = Decomposer20 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer20 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20)) = f++-- | A type alias for a constraint tuple with 21 arguments.+type CTuple21 = Decomposer21 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer21 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21)) = f++-- | A type alias for a constraint tuple with 22 arguments.+type CTuple22 = Decomposer22 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer22 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22)) = f++-- | A type alias for a constraint tuple with 23 arguments.+type CTuple23 = Decomposer23 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer23 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23)) = f++-- | A type alias for a constraint tuple with 24 arguments.+type CTuple24 = Decomposer24 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer24 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24)) = f++-- | A type alias for a constraint tuple with 25 arguments.+type CTuple25 = Decomposer25 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer25 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25)) = f++-- | A type alias for a constraint tuple with 26 arguments.+type CTuple26 = Decomposer26 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer26 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26)) = f++-- | A type alias for a constraint tuple with 27 arguments.+type CTuple27 = Decomposer27 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer27 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27)) = f++-- | A type alias for a constraint tuple with 28 arguments.+type CTuple28 = Decomposer28 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer28 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28)) = f++-- | A type alias for a constraint tuple with 29 arguments.+type CTuple29 = Decomposer29 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer29 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29)) = f++-- | A type alias for a constraint tuple with 30 arguments.+type CTuple30 = Decomposer30 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer30 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30)) = f++-- | A type alias for a constraint tuple with 31 arguments.+type CTuple31 = Decomposer31 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer31 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31)) = f++-- | A type alias for a constraint tuple with 32 arguments.+type CTuple32 = Decomposer32 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer32 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32)) = f++-- | A type alias for a constraint tuple with 33 arguments.+type CTuple33 = Decomposer33 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer33 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33)) = f++-- | A type alias for a constraint tuple with 34 arguments.+type CTuple34 = Decomposer34 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer34 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34)) = f++-- | A type alias for a constraint tuple with 35 arguments.+type CTuple35 = Decomposer35 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer35 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35)) = f++-- | A type alias for a constraint tuple with 36 arguments.+type CTuple36 = Decomposer36 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer36 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36)) = f++-- | A type alias for a constraint tuple with 37 arguments.+type CTuple37 = Decomposer37 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer37 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37)) = f++-- | A type alias for a constraint tuple with 38 arguments.+type CTuple38 = Decomposer38 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer38 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38)) = f++-- | A type alias for a constraint tuple with 39 arguments.+type CTuple39 = Decomposer39 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer39 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39)) = f++-- | A type alias for a constraint tuple with 40 arguments.+type CTuple40 = Decomposer40 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer40 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40)) = f++-- | A type alias for a constraint tuple with 41 arguments.+type CTuple41 = Decomposer41 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer41 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41)) = f++-- | A type alias for a constraint tuple with 42 arguments.+type CTuple42 = Decomposer42 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer42 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42)) = f++-- | A type alias for a constraint tuple with 43 arguments.+type CTuple43 = Decomposer43 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer43 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43)) = f++-- | A type alias for a constraint tuple with 44 arguments.+type CTuple44 = Decomposer44 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer44 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44)) = f++-- | A type alias for a constraint tuple with 45 arguments.+type CTuple45 = Decomposer45 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer45 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45)) = f++-- | A type alias for a constraint tuple with 46 arguments.+type CTuple46 = Decomposer46 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer46 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46)) = f++-- | A type alias for a constraint tuple with 47 arguments.+type CTuple47 = Decomposer47 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer47 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47)) = f++-- | A type alias for a constraint tuple with 48 arguments.+type CTuple48 = Decomposer48 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer48 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48)) = f++-- | A type alias for a constraint tuple with 49 arguments.+type CTuple49 = Decomposer49 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer49 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49)) = f++-- | A type alias for a constraint tuple with 50 arguments.+type CTuple50 = Decomposer50 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer50 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50)) = f++-- | A type alias for a constraint tuple with 51 arguments.+type CTuple51 = Decomposer51 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer51 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51)) = f++-- | A type alias for a constraint tuple with 52 arguments.+type CTuple52 = Decomposer52 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer52 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52)) = f++-- | A type alias for a constraint tuple with 53 arguments.+type CTuple53 = Decomposer53 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer53 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53)) = f++-- | A type alias for a constraint tuple with 54 arguments.+type CTuple54 = Decomposer54 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer54 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54)) = f++-- | A type alias for a constraint tuple with 55 arguments.+type CTuple55 = Decomposer55 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer55 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55)) = f++-- | A type alias for a constraint tuple with 56 arguments.+type CTuple56 = Decomposer56 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer56 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55 c56)) = f++-- | A type alias for a constraint tuple with 57 arguments.+type CTuple57 = Decomposer57 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer57 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55 c56 c57)) = f++-- | A type alias for a constraint tuple with 58 arguments.+type CTuple58 = Decomposer58 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer58 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55 c56 c57 c58)) = f++-- | A type alias for a constraint tuple with 59 arguments.+type CTuple59 = Decomposer59 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer59 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55 c56 c57 c58 c59)) = f++-- | A type alias for a constraint tuple with 60 arguments.+type CTuple60 = Decomposer60 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer60 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55 c56 c57 c58 c59 c60)) = f++-- | A type alias for a constraint tuple with 61 arguments.+type CTuple61 = Decomposer61 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer61 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55 c56 c57 c58 c59 c60 c61)) = f++-- | A type alias for a constraint tuple with 62 arguments.+type CTuple62 = Decomposer62 ('Proxy :: Proxy (((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()) :: Constraint))+type Decomposer62 (x :: Proxy ((f :: Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint -> Constraint) c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40 c41 c42 c43 c44 c45 c46 c47 c48 c49 c50 c51 c52 c53 c54 c55 c56 c57 c58 c59 c60 c61 c62)) = f++#endif