@@ -59,175 +59,167 @@ import Data.Functor.Apply ( WrappedApplicative(..) )
59import Data.These ( These )
59import Data.These ( These )
62−fromResult' :: forall exprs a. ToExprs a exprs => Columns exprs (Col Result) -> a
63−fromResult' = fromResult @_ @exprs
66−toResult' :: forall exprs a. ToExprs a exprs => a -> Columns exprs (Col Result)
67−toResult' = toResult @_ @exprs
70type ToExprs :: Type -> Type -> Constraint
62type ToExprs :: Type -> Type -> Constraint
71−class Table Expr exprs => ToExprs a exprs where
63+class Table Expr exprs => ToExprs exprs a where
72 fromResult :: Columns exprs (Col Result) -> a
64 fromResult :: Columns exprs (Col Result) -> a
73 toResult :: a -> Columns exprs (Col Result)
65 toResult :: a -> Columns exprs (Col Result)
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
77 fromResult (HType (Result a)) = a
69 fromResult (HType (Result a)) = a
78 toResult = HType . Result
70 toResult = HType . Result
81−instance (Sql DBType a, x ~ [a]) => ToExprs [a] (Expr x) where
73+instance (Sql DBType a, x ~ [a]) => ToExprs (Expr x) [a] where
82 fromResult (HType (Result a)) = a
74 fromResult (HType (Result a)) = a
83 toResult = HType . Result
75 toResult = HType . Result
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)
88 fromResult (HType (Result a)) = a
80 fromResult (HType (Result a)) = a
89 toResult = HType . Result
81 toResult = HType . Result
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)
94 fromResult (HType (Result a)) = a
86 fromResult (HType (Result a)) = a
95 toResult = HType . Result
87 toResult = HType . Result
98−instance (ToExprs a exprs1, ToExprs b exprs2, x ~ EitherTable exprs1 exprs2) =>
90+instance (ToExprs exprs1 a, ToExprs exprs2 b, x ~ EitherTable exprs1 exprs2) =>
99− ToExprs (Either a b) x
91+ ToExprs x (Either a b)
101 fromResult =
93 fromResult =
102− bimap (fromResult' @exprs1) (fromResult' @exprs2) .
94+ bimap (fromResult @exprs1) (fromResult @exprs2) .
103 fromColumns
95 fromColumns
104 toResult =
96 toResult =
105 toColumns .
97 toColumns .
106− bimap (toResult' @exprs1) (toResult' @exprs2)
98+ bimap (toResult @exprs1) (toResult @exprs2)
109−instance ToExprs a exprs => ToExprs [a] (ListTable exprs) where
101+instance ToExprs exprs a => ToExprs (ListTable exprs) [a] where
110− fromResult = fmap (fromResult' @exprs) . fromColumns
102+ fromResult = fmap (fromResult @exprs) . fromColumns
111− toResult = toColumns . fmap (toResult' @exprs)
103+ toResult = toColumns . fmap (toResult @exprs)
114−instance ToExprs a exprs => ToExprs (Maybe a) (MaybeTable exprs) where
106+instance ToExprs exprs a => ToExprs (MaybeTable exprs) (Maybe a) where
115− fromResult = fmap (fromResult' @exprs) . fromColumns
107+ fromResult = fmap (fromResult @exprs) . fromColumns
116− toResult = toColumns . fmap (toResult' @exprs)
108+ toResult = toColumns . fmap (toResult @exprs)
119−instance ToExprs a exprs => ToExprs (NonEmpty a) (NonEmptyTable exprs)
111+instance ToExprs exprs a => ToExprs (NonEmptyTable exprs) (NonEmpty a)
121− fromResult = fmap (fromResult' @exprs) . fromColumns
113+ fromResult = fmap (fromResult @exprs) . fromColumns
122− toResult = toColumns . fmap (toResult' @exprs)
114+ toResult = toColumns . fmap (toResult @exprs)
125−instance (ToExprs a exprs1, ToExprs b exprs2, x ~ TheseTable exprs1 exprs2) =>
117+instance (ToExprs exprs1 a, ToExprs exprs2 b, x ~ TheseTable exprs1 exprs2) =>
126− ToExprs (These a b) x
118+ ToExprs x (These a b)
128 fromResult =
120 fromResult =
129− bimap (fromResult' @exprs1) (fromResult' @exprs2) .
121+ bimap (fromResult @exprs1) (fromResult @exprs2) .
130 fromColumns
122 fromColumns
131 toResult =
123 toResult =
132 toColumns .
124 toColumns .
133− bimap (toResult' @exprs1) (toResult' @exprs2)
125+ bimap (toResult @exprs1) (toResult @exprs2)
136−instance (ToExprs a exprs1, ToExprs b exprs2, x ~ (exprs1, exprs2)) =>
128+instance (ToExprs exprs1 a, ToExprs exprs2 b, x ~ (exprs1, exprs2)) =>
137− ToExprs (a, b) x
129+ ToExprs x (a, b)
139 fromResult (HPair a b) =
131 fromResult (HPair a b) =
140− ( fromResult' @exprs1 $ hunlabel unlabeler a
132+ ( fromResult @exprs1 $ hunlabel unlabeler a
141− , fromResult' @exprs2 $ hunlabel unlabeler b
133+ , fromResult @exprs2 $ hunlabel unlabeler b
143 toResult (a, b) = HPair
135 toResult (a, b) = HPair
144− { hfst = hlabel labeler $ toResult' @exprs1 a
136+ { hfst = hlabel labeler $ toResult @exprs1 a
145− , hsnd = hlabel labeler $ toResult' @exprs2 b
137+ , hsnd = hlabel labeler $ toResult @exprs2 b
150− ( ToExprs a exprs1
142+ ( ToExprs exprs1 a
151− , ToExprs b exprs2
143+ , ToExprs exprs2 b
152− , ToExprs c exprs3
144+ , ToExprs exprs3 c
153 , x ~ (exprs1, exprs2, exprs3)
145 , x ~ (exprs1, exprs2, exprs3)
154− ) => ToExprs (a, b, c) x
146+ ) => ToExprs x (a, b, c)
156 fromResult (HTrio a b c) =
148 fromResult (HTrio a b c) =
157− ( fromResult' @exprs1 $ hunlabel unlabeler a
149+ ( fromResult @exprs1 $ hunlabel unlabeler a
158− , fromResult' @exprs2 $ hunlabel unlabeler b
150+ , fromResult @exprs2 $ hunlabel unlabeler b
159− , fromResult' @exprs3 $ hunlabel unlabeler c
151+ , fromResult @exprs3 $ hunlabel unlabeler c
161 toResult (a, b, c) = HTrio
153 toResult (a, b, c) = HTrio
162− { hfst = hlabel labeler $ toResult' @exprs1 a
154+ { hfst = hlabel labeler $ toResult @exprs1 a
163− , hsnd = hlabel labeler $ toResult' @exprs2 b
155+ , hsnd = hlabel labeler $ toResult @exprs2 b
164− , htrd = hlabel labeler $ toResult' @exprs3 c
156+ , htrd = hlabel labeler $ toResult @exprs3 c
169− ( ToExprs a exprs1
161+ ( ToExprs exprs1 a
170− , ToExprs b exprs2
162+ , ToExprs exprs2 b
171− , ToExprs c exprs3
163+ , ToExprs exprs3 c
172− , ToExprs d exprs4
164+ , ToExprs exprs4 d
173 , x ~ (exprs1, exprs2, exprs3, exprs4)
165 , x ~ (exprs1, exprs2, exprs3, exprs4)
174− ) => ToExprs (a, b, c, d) x
166+ ) => ToExprs x (a, b, c, d)
176 fromResult (HQuartet a b c d) =
168 fromResult (HQuartet a b c d) =
177− ( fromResult' @exprs1 $ hunlabel unlabeler a
169+ ( fromResult @exprs1 $ hunlabel unlabeler a
178− , fromResult' @exprs2 $ hunlabel unlabeler b
170+ , fromResult @exprs2 $ hunlabel unlabeler b
179− , fromResult' @exprs3 $ hunlabel unlabeler c
171+ , fromResult @exprs3 $ hunlabel unlabeler c
180− , fromResult' @exprs4 $ hunlabel unlabeler d
172+ , fromResult @exprs4 $ hunlabel unlabeler d
182 toResult (a, b, c, d) = HQuartet
174 toResult (a, b, c, d) = HQuartet
183− { hfst = hlabel labeler $ toResult' @exprs1 a
175+ { hfst = hlabel labeler $ toResult @exprs1 a
184− , hsnd = hlabel labeler $ toResult' @exprs2 b
176+ , hsnd = hlabel labeler $ toResult @exprs2 b
185− , htrd = hlabel labeler $ toResult' @exprs3 c
177+ , htrd = hlabel labeler $ toResult @exprs3 c
186− , hfrt = hlabel labeler $ toResult' @exprs4 d
178+ , hfrt = hlabel labeler $ toResult @exprs4 d
191− ( ToExprs a exprs1
183+ ( ToExprs exprs1 a
192− , ToExprs b exprs2
184+ , ToExprs exprs2 b
193− , ToExprs c exprs3
185+ , ToExprs exprs3 c
194− , ToExprs d exprs4
186+ , ToExprs exprs4 d
195− , ToExprs e exprs5
187+ , ToExprs exprs5 e
196 , x ~ (exprs1, exprs2, exprs3, exprs4, exprs5)
188 , x ~ (exprs1, exprs2, exprs3, exprs4, exprs5)
197− ) => ToExprs (a, b, c, d, e) x
189+ ) => ToExprs x (a, b, c, d, e)
199 fromResult (HQuintet a b c d e) =
191 fromResult (HQuintet a b c d e) =
200− ( fromResult' @exprs1 $ hunlabel unlabeler a
192+ ( fromResult @exprs1 $ hunlabel unlabeler a
201− , fromResult' @exprs2 $ hunlabel unlabeler b
193+ , fromResult @exprs2 $ hunlabel unlabeler b
202− , fromResult' @exprs3 $ hunlabel unlabeler c
194+ , fromResult @exprs3 $ hunlabel unlabeler c
203− , fromResult' @exprs4 $ hunlabel unlabeler d
195+ , fromResult @exprs4 $ hunlabel unlabeler d
204− , fromResult' @exprs5 $ hunlabel unlabeler e
196+ , fromResult @exprs5 $ hunlabel unlabeler e
206 toResult (a, b, c, d, e) = HQuintet
198 toResult (a, b, c, d, e) = HQuintet
207− { hfst = hlabel labeler $ toResult' @exprs1 a
199+ { hfst = hlabel labeler $ toResult @exprs1 a
208− , hsnd = hlabel labeler $ toResult' @exprs2 b
200+ , hsnd = hlabel labeler $ toResult @exprs2 b
209− , htrd = hlabel labeler $ toResult' @exprs3 c
201+ , htrd = hlabel labeler $ toResult @exprs3 c
210− , hfrt = hlabel labeler $ toResult' @exprs4 d
202+ , hfrt = hlabel labeler $ toResult @exprs4 d
211− , hfft = hlabel labeler $ toResult' @exprs5 e
203+ , hfft = hlabel labeler $ toResult @exprs5 e
215instance (HTable t, result ~ Col Result, x ~ t (Col Expr)) =>
207instance (HTable t, result ~ Col Result, x ~ t (Col Expr)) =>
216− ToExprs (t result) x
208+ ToExprs x (t result)
218 fromResult = id
210 fromResult = id
219 toResult = id
211 toResult = id
222instance (Recontextualize Result Expr (t Result) (t Expr), result ~ Result, x ~ t Expr) =>
214instance (Recontextualize Result Expr (t Result) (t Expr), result ~ Result, x ~ t Expr) =>
223− ToExprs (t result) x
215+ ToExprs x (t result)
225 fromResult = fromColumns
217 fromResult = fromColumns
226 toResult = toColumns
218 toResult = toColumns
229instance (KnownSpec spec, x ~ Col Expr spec) =>
221instance (KnownSpec spec, x ~ Col Expr spec) =>
230− ToExprs (Col Result spec) x
222+ ToExprs x (Col Result spec)
232 fromResult = fromColumns
224 fromResult = fromColumns
233 toResult = toColumns
225 toResult = toColumns
@@ -256,19 +248,19 @@ type instance FromExprs (t (Col Expr)) = t (Col Result)
256-- @sql@, which contains SQL expressions, and the type @haskell@, which
248-- @sql@, which contains SQL expressions, and the type @haskell@, which
257-- contains the Haskell decoding of rows containing @sql@ SQL expressions.
249-- contains the Haskell decoding of rows containing @sql@ SQL expressions.
258type Serializable :: Type -> Type -> Constraint
250type Serializable :: Type -> Type -> Constraint
259−class (ToExprs a exprs, a ~ FromExprs exprs) => Serializable exprs a | exprs -> a
251+class (ToExprs exprs a, a ~ FromExprs exprs) => Serializable exprs a | exprs -> a
260−instance (ToExprs a exprs, a ~ FromExprs exprs) => Serializable exprs a
252+instance (ToExprs exprs a, a ~ FromExprs exprs) => Serializable exprs a
261instance {-# OVERLAPPING #-} Sql DBType a => Serializable (Expr a) a
253instance {-# OVERLAPPING #-} Sql DBType a => Serializable (Expr a) a
264-- | Use @lit@ to turn literal Haskell values into expressions. @lit@ is
256-- | Use @lit@ to turn literal Haskell values into expressions. @lit@ is
265-- capable of lifting single @Expr@s to full tables.
257-- capable of lifting single @Expr@s to full tables.
266lit :: forall exprs a. Serializable exprs a => a -> exprs
258lit :: forall exprs a. Serializable exprs a => a -> exprs
267−lit = fromColumns . litHTable . toResult' @exprs
259+lit = fromColumns . litHTable . toResult @exprs
270parse :: forall exprs a. Serializable exprs a => Hasql.Row a
262parse :: forall exprs a. Serializable exprs a => Hasql.Row a
271−parse = fromResult' @exprs <$> parseHTable
263+parse = fromResult @exprs <$> parseHTable
274type Encodes :: Type -> Type -> Constraint
266type Encodes :: Type -> Type -> Constraint