on master help sign in
Add instances for 6 and 7 tuples (after all, they're free now)

We stop at 7 though because even GHC doesn't provide Generic instances for 8-tuples and beyond.

commitb8ff282b10f0ea4e31c05013698eb4c9ff4cb32c authorShane O'Brien <shane.obrien@circuithub.com> dateSun 18 Apr 2021, 16:44 (6 years ago) parentfb21075
4 files changed+73
src/Rel8/Table.hs+16 src/Rel8/Table/Eq.hs+11 src/Rel8/Table/Ord.hs+13 src/Rel8/Table/Serialize.hs+33
src/Rel8/Table.hs+16
@@ -310,6 +310,22 @@ instance
310310 => Table context (a, b, c, d, e)
311311
312312
313+instance
314+ ( Table context a, Table context b, Table context c, Table context d
315+ , Table context e, Table context f
316+ , Labelable context
317+ )
318+ => Table context (a, b, c, d, e, f)
319+
320+
321+instance
322+ ( Table context a, Table context b, Table context c, Table context d
323+ , Table context e, Table context f, Table context g
324+ , Labelable context
325+ )
326+ => Table context (a, b, c, d, e, f, g)
327+
328+
313329type Congruent :: Type -> Type -> Constraint
314330class Columns a ~ Columns b => Congruent a b
315331instance Columns a ~ Columns b => Congruent a b
src/Rel8/Table/Eq.hs+11
@@ -129,6 +129,17 @@ instance (EqTable a, EqTable b, EqTable c, EqTable d, EqTable e) =>
129129 EqTable (a, b, c, d, e)
130130
131131
132+instance (EqTable a, EqTable b, EqTable c, EqTable d, EqTable e, EqTable f) =>
133+ EqTable (a, b, c, d, e, f)
134+
135+
136+instance
137+ ( EqTable a, EqTable b, EqTable c, EqTable d, EqTable e, EqTable f
138+ , EqTable g
139+ )
140+ => EqTable (a, b, c, d, e, f, g)
141+
142+
132143-- | Compare two 'Table's for equality. This corresponds to comparing all
133144-- columns inside each table for equality, and combining all comparisons with
134145-- @AND@.
src/Rel8/Table/Ord.hs+13
@@ -133,6 +133,19 @@ instance (OrdTable a, OrdTable b, OrdTable c, OrdTable d, OrdTable e) =>
133133 OrdTable (a, b, c, d, e)
134134
135135
136+instance
137+ ( OrdTable a, OrdTable b, OrdTable c, OrdTable d, OrdTable e, OrdTable f
138+ )
139+ => OrdTable (a, b, c, d, e, f)
140+
141+
142+instance
143+ ( OrdTable a, OrdTable b, OrdTable c, OrdTable d, OrdTable e, OrdTable f
144+ , OrdTable g
145+ )
146+ => OrdTable (a, b, c, d, e, f, g)
147+
148+
136149-- | Test if one 'Table' sorts before another. Corresponds to comparing all
137150-- columns with '<'.
138151(<:) :: forall a. OrdTable a => a -> a -> Expr Bool
src/Rel8/Table/Serialize.hs+33
@@ -217,6 +217,31 @@ instance
217217 => ToExprs x (a, b, c, d, e)
218218
219219
220+instance
221+ ( ToExprs exprs1 a
222+ , ToExprs exprs2 b
223+ , ToExprs exprs3 c
224+ , ToExprs exprs4 d
225+ , ToExprs exprs5 e
226+ , ToExprs exprs6 f
227+ , x ~ (exprs1, exprs2, exprs3, exprs4, exprs5, exprs6)
228+ )
229+ => ToExprs x (a, b, c, d, e, f)
230+
231+
232+instance
233+ ( ToExprs exprs1 a
234+ , ToExprs exprs2 b
235+ , ToExprs exprs3 c
236+ , ToExprs exprs4 d
237+ , ToExprs exprs5 e
238+ , ToExprs exprs6 f
239+ , ToExprs exprs7 g
240+ , x ~ (exprs1, exprs2, exprs3, exprs4, exprs5, exprs6, exprs7)
241+ )
242+ => ToExprs x (a, b, c, d, e, f, g)
243+
244+
220245instance (HTable t, result ~ Col Result, x ~ t (Col Expr)) =>
221246 ToExprs x (t result)
222247 where
@@ -253,6 +278,14 @@ type instance FromExprs (a, b, c, d) =
253278 (FromExprs a, FromExprs b, FromExprs c, FromExprs d)
254279type instance FromExprs (a, b, c, d, e) =
255280 (FromExprs a, FromExprs b, FromExprs c, FromExprs d, FromExprs e)
281+type instance FromExprs (a, b, c, d, e, f) =
282+ ( FromExprs a, FromExprs b, FromExprs c, FromExprs d, FromExprs e
283+ , FromExprs f
284+ )
285+type instance FromExprs (a, b, c, d, e, f, g) =
286+ ( FromExprs a, FromExprs b, FromExprs c, FromExprs d, FromExprs e
287+ , FromExprs f, FromExprs g
288+ )
256289type instance FromExprs (t Expr) = t Result
257290type instance FromExprs (t (Col Expr)) = t (Col Result)
258291