@@ -59,175 +59,167 @@ import Data.Functor.Apply ( WrappedApplicative(..) )
5959import Data.These ( These )
6060
6161
62−fromResult' :: forall exprs a. ToExprs a exprs => Columns exprs (Col Result) -> a
63−fromResult' = fromResult @_ @exprs
64−
65−
66−toResult' :: forall exprs a. ToExprs a exprs => a -> Columns exprs (Col Result)
67−toResult' = toResult @_ @exprs
68−
69−
7062type ToExprs :: Type -> Type -> Constraint
71−class Table Expr exprs => ToExprs a exprs where
63+class Table Expr exprs => ToExprs exprs a where
7264 fromResult :: Columns exprs (Col Result) -> a
7365 toResult :: a -> Columns exprs (Col Result)
7466
7567
76−instance {-# OVERLAPPABLE #-} (Sql DBType a, x ~ Expr a) => ToExprs a x where
68+instance {-# OVERLAPPABLE #-} (Sql DBType a, x ~ Expr a) => ToExprs x a where
7769 fromResult (HType (Result a)) = a
7870 toResult = HType . Result
7971
8072
81−instance (Sql DBType a, x ~ [a]) => ToExprs [a] (Expr x) where
73+instance (Sql DBType a, x ~ [a]) => ToExprs (Expr x) [a] where
8274 fromResult (HType (Result a)) = a
8375 toResult = HType . Result
8476
8577
86−instance (Sql DBType a, NotNull a, x ~ Maybe a) => ToExprs (Maybe a) (Expr x)
78+instance (Sql DBType a, NotNull a, x ~ Maybe a) => ToExprs (Expr x) (Maybe a)
8779 where
8880 fromResult (HType (Result a)) = a
8981 toResult = HType . Result
9082
9183
92−instance (Sql DBType a, NotNull a, x ~ NonEmpty a) => ToExprs (NonEmpty a) (Expr x)
84+instance (Sql DBType a, NotNull a, x ~ NonEmpty a) => ToExprs (Expr x) (NonEmpty a)
9385 where
9486 fromResult (HType (Result a)) = a
9587 toResult = HType . Result
9688
9789
98−instance (ToExprs a exprs1, ToExprs b exprs2, x ~ EitherTable exprs1 exprs2) =>
99− ToExprs (Either a b) x
90+instance (ToExprs exprs1 a, ToExprs exprs2 b, x ~ EitherTable exprs1 exprs2) =>
91+ ToExprs x (Either a b)
10092 where
10193 fromResult =
102− bimap (fromResult' @exprs1) (fromResult' @exprs2) .
94+ bimap (fromResult @exprs1) (fromResult @exprs2) .
10395 fromColumns
10496 toResult =
10597 toColumns .
106− bimap (toResult' @exprs1) (toResult' @exprs2)
98+ bimap (toResult @exprs1) (toResult @exprs2)
10799
108100
109−instance ToExprs a exprs => ToExprs [a] (ListTable exprs) where
110− fromResult = fmap (fromResult' @exprs) . fromColumns
111− toResult = toColumns . fmap (toResult' @exprs)
101+instance ToExprs exprs a => ToExprs (ListTable exprs) [a] where
102+ fromResult = fmap (fromResult @exprs) . fromColumns
103+ toResult = toColumns . fmap (toResult @exprs)
112104
113105
114−instance ToExprs a exprs => ToExprs (Maybe a) (MaybeTable exprs) where
115− fromResult = fmap (fromResult' @exprs) . fromColumns
116− toResult = toColumns . fmap (toResult' @exprs)
106+instance ToExprs exprs a => ToExprs (MaybeTable exprs) (Maybe a) where
107+ fromResult = fmap (fromResult @exprs) . fromColumns
108+ toResult = toColumns . fmap (toResult @exprs)
117109
118110
119−instance ToExprs a exprs => ToExprs (NonEmpty a) (NonEmptyTable exprs)
111+instance ToExprs exprs a => ToExprs (NonEmptyTable exprs) (NonEmpty a)
120112 where
121− fromResult = fmap (fromResult' @exprs) . fromColumns
122− toResult = toColumns . fmap (toResult' @exprs)
113+ fromResult = fmap (fromResult @exprs) . fromColumns
114+ toResult = toColumns . fmap (toResult @exprs)
123115
124116
125−instance (ToExprs a exprs1, ToExprs b exprs2, x ~ TheseTable exprs1 exprs2) =>
126− ToExprs (These a b) x
117+instance (ToExprs exprs1 a, ToExprs exprs2 b, x ~ TheseTable exprs1 exprs2) =>
118+ ToExprs x (These a b)
127119 where
128120 fromResult =
129− bimap (fromResult' @exprs1) (fromResult' @exprs2) .
121+ bimap (fromResult @exprs1) (fromResult @exprs2) .
130122 fromColumns
131123 toResult =
132124 toColumns .
133− bimap (toResult' @exprs1) (toResult' @exprs2)
125+ bimap (toResult @exprs1) (toResult @exprs2)
134126
135127
136−instance (ToExprs a exprs1, ToExprs b exprs2, x ~ (exprs1, exprs2)) =>
137− ToExprs (a, b) x
128+instance (ToExprs exprs1 a, ToExprs exprs2 b, x ~ (exprs1, exprs2)) =>
129+ ToExprs x (a, b)
138130 where
139131 fromResult (HPair a b) =
140− ( fromResult' @exprs1 $ hunlabel unlabeler a
141− , fromResult' @exprs2 $ hunlabel unlabeler b
132+ ( fromResult @exprs1 $ hunlabel unlabeler a
133+ , fromResult @exprs2 $ hunlabel unlabeler b
142134 )
143135 toResult (a, b) = HPair
144− { hfst = hlabel labeler $ toResult' @exprs1 a
145− , hsnd = hlabel labeler $ toResult' @exprs2 b
136+ { hfst = hlabel labeler $ toResult @exprs1 a
137+ , hsnd = hlabel labeler $ toResult @exprs2 b
146138 }
147139
148140
149141instance
150− ( ToExprs a exprs1
151− , ToExprs b exprs2
152− , ToExprs c exprs3
142+ ( ToExprs exprs1 a
143+ , ToExprs exprs2 b
144+ , ToExprs exprs3 c
153145 , x ~ (exprs1, exprs2, exprs3)
154− ) => ToExprs (a, b, c) x
146+ ) => ToExprs x (a, b, c)
155147 where
156148 fromResult (HTrio a b c) =
157− ( fromResult' @exprs1 $ hunlabel unlabeler a
158− , fromResult' @exprs2 $ hunlabel unlabeler b
159− , fromResult' @exprs3 $ hunlabel unlabeler c
149+ ( fromResult @exprs1 $ hunlabel unlabeler a
150+ , fromResult @exprs2 $ hunlabel unlabeler b
151+ , fromResult @exprs3 $ hunlabel unlabeler c
160152 )
161153 toResult (a, b, c) = HTrio
162− { hfst = hlabel labeler $ toResult' @exprs1 a
163− , hsnd = hlabel labeler $ toResult' @exprs2 b
164− , htrd = hlabel labeler $ toResult' @exprs3 c
154+ { hfst = hlabel labeler $ toResult @exprs1 a
155+ , hsnd = hlabel labeler $ toResult @exprs2 b
156+ , htrd = hlabel labeler $ toResult @exprs3 c
165157 }
166158
167159
168160instance
169− ( ToExprs a exprs1
170− , ToExprs b exprs2
171− , ToExprs c exprs3
172− , ToExprs d exprs4
161+ ( ToExprs exprs1 a
162+ , ToExprs exprs2 b
163+ , ToExprs exprs3 c
164+ , ToExprs exprs4 d
173165 , x ~ (exprs1, exprs2, exprs3, exprs4)
174− ) => ToExprs (a, b, c, d) x
166+ ) => ToExprs x (a, b, c, d)
175167 where
176168 fromResult (HQuartet a b c d) =
177− ( fromResult' @exprs1 $ hunlabel unlabeler a
178− , fromResult' @exprs2 $ hunlabel unlabeler b
179− , fromResult' @exprs3 $ hunlabel unlabeler c
180− , fromResult' @exprs4 $ hunlabel unlabeler d
169+ ( fromResult @exprs1 $ hunlabel unlabeler a
170+ , fromResult @exprs2 $ hunlabel unlabeler b
171+ , fromResult @exprs3 $ hunlabel unlabeler c
172+ , fromResult @exprs4 $ hunlabel unlabeler d
181173 )
182174 toResult (a, b, c, d) = HQuartet
183− { hfst = hlabel labeler $ toResult' @exprs1 a
184− , hsnd = hlabel labeler $ toResult' @exprs2 b
185− , htrd = hlabel labeler $ toResult' @exprs3 c
186− , hfrt = hlabel labeler $ toResult' @exprs4 d
175+ { hfst = hlabel labeler $ toResult @exprs1 a
176+ , hsnd = hlabel labeler $ toResult @exprs2 b
177+ , htrd = hlabel labeler $ toResult @exprs3 c
178+ , hfrt = hlabel labeler $ toResult @exprs4 d
187179 }
188180
189181
190182instance
191− ( ToExprs a exprs1
192− , ToExprs b exprs2
193− , ToExprs c exprs3
194− , ToExprs d exprs4
195− , ToExprs e exprs5
183+ ( ToExprs exprs1 a
184+ , ToExprs exprs2 b
185+ , ToExprs exprs3 c
186+ , ToExprs exprs4 d
187+ , ToExprs exprs5 e
196188 , x ~ (exprs1, exprs2, exprs3, exprs4, exprs5)
197− ) => ToExprs (a, b, c, d, e) x
189+ ) => ToExprs x (a, b, c, d, e)
198190 where
199191 fromResult (HQuintet a b c d e) =
200− ( fromResult' @exprs1 $ hunlabel unlabeler a
201− , fromResult' @exprs2 $ hunlabel unlabeler b
202− , fromResult' @exprs3 $ hunlabel unlabeler c
203− , fromResult' @exprs4 $ hunlabel unlabeler d
204− , fromResult' @exprs5 $ hunlabel unlabeler e
192+ ( fromResult @exprs1 $ hunlabel unlabeler a
193+ , fromResult @exprs2 $ hunlabel unlabeler b
194+ , fromResult @exprs3 $ hunlabel unlabeler c
195+ , fromResult @exprs4 $ hunlabel unlabeler d
196+ , fromResult @exprs5 $ hunlabel unlabeler e
205197 )
206198 toResult (a, b, c, d, e) = HQuintet
207− { hfst = hlabel labeler $ toResult' @exprs1 a
208− , hsnd = hlabel labeler $ toResult' @exprs2 b
209− , htrd = hlabel labeler $ toResult' @exprs3 c
210− , hfrt = hlabel labeler $ toResult' @exprs4 d
211− , hfft = hlabel labeler $ toResult' @exprs5 e
199+ { hfst = hlabel labeler $ toResult @exprs1 a
200+ , hsnd = hlabel labeler $ toResult @exprs2 b
201+ , htrd = hlabel labeler $ toResult @exprs3 c
202+ , hfrt = hlabel labeler $ toResult @exprs4 d
203+ , hfft = hlabel labeler $ toResult @exprs5 e
212204 }
213205
214206
215207instance (HTable t, result ~ Col Result, x ~ t (Col Expr)) =>
216− ToExprs (t result) x
208+ ToExprs x (t result)
217209 where
218210 fromResult = id
219211 toResult = id
220212
221213
222214instance (Recontextualize Result Expr (t Result) (t Expr), result ~ Result, x ~ t Expr) =>
223− ToExprs (t result) x
215+ ToExprs x (t result)
224216 where
225217 fromResult = fromColumns
226218 toResult = toColumns
227219
228220
229221instance (KnownSpec spec, x ~ Col Expr spec) =>
230− ToExprs (Col Result spec) x
222+ ToExprs x (Col Result spec)
231223 where
232224 fromResult = fromColumns
233225 toResult = toColumns
@@ -256,19 +248,19 @@ type instance FromExprs (t (Col Expr)) = t (Col Result)
256248-- @sql@, which contains SQL expressions, and the type @haskell@, which
257249-- contains the Haskell decoding of rows containing @sql@ SQL expressions.
258250type Serializable :: Type -> Type -> Constraint
259−class (ToExprs a exprs, a ~ FromExprs exprs) => Serializable exprs a | exprs -> a
260−instance (ToExprs a exprs, a ~ FromExprs exprs) => Serializable exprs a
251+class (ToExprs exprs a, a ~ FromExprs exprs) => Serializable exprs a | exprs -> a
252+instance (ToExprs exprs a, a ~ FromExprs exprs) => Serializable exprs a
261253instance {-# OVERLAPPING #-} Sql DBType a => Serializable (Expr a) a
262254
263255
264256-- | Use @lit@ to turn literal Haskell values into expressions. @lit@ is
265257-- capable of lifting single @Expr@s to full tables.
266258lit :: forall exprs a. Serializable exprs a => a -> exprs
267−lit = fromColumns . litHTable . toResult' @exprs
259+lit = fromColumns . litHTable . toResult @exprs
268260
269261
270262parse :: forall exprs a. Serializable exprs a => Hasql.Row a
271−parse = fromResult' @exprs <$> parseHTable
263+parse = fromResult @exprs <$> parseHTable
272264
273265
274266type Encodes :: Type -> Type -> Constraint