@@ -21,7 +21,6 @@ where
2121
2222-- base
2323import Data.Bifunctor ( bimap )
24−import Data.Functor.Identity ( Identity )
2524import Data.Kind ( Constraint, Type )
2625import Data.List.NonEmpty ( NonEmpty )
2726import Prelude
@@ -42,6 +41,7 @@ import Rel8.Schema.HTable.Pair ( HPair(..) )
4241import Rel8.Schema.HTable.Trio ( HTrio(..) )
4342import Rel8.Schema.HTable.Type ( HType(..) )
4443import Rel8.Schema.Null ( NotNull, Sql )
44+import Rel8.Schema.Result ( Result )
4545import Rel8.Schema.Spec ( SSpec(..), KnownSpec )
4646import Rel8.Table ( Table, Columns, fromColumns, toColumns )
4747import Rel8.Table.Either ( EitherTable )
@@ -59,90 +59,90 @@ import Data.Functor.Apply ( WrappedApplicative(..) )
5959import Data.These ( These )
6060
6161
62−fromIdentity' :: forall exprs a. ToExprs a exprs => Columns exprs (Col Identity) -> a
63−fromIdentity' = fromIdentity @_ @exprs
62+fromResult' :: forall exprs a. ToExprs a exprs => Columns exprs (Col Result) -> a
63+fromResult' = fromResult @_ @exprs
6464
6565
66−toIdentity' :: forall exprs a. ToExprs a exprs => a -> Columns exprs (Col Identity)
67−toIdentity' = toIdentity @_ @exprs
66+toResult' :: forall exprs a. ToExprs a exprs => a -> Columns exprs (Col Result)
67+toResult' = toResult @_ @exprs
6868
6969
7070type ToExprs :: Type -> Type -> Constraint
7171class Table Expr exprs => ToExprs a exprs where
72− fromIdentity :: Columns exprs (Col Identity) -> a
73− toIdentity :: a -> Columns exprs (Col Identity)
72+ fromResult :: Columns exprs (Col Result) -> a
73+ toResult :: a -> Columns exprs (Col Result)
7474
7575
7676instance {-# OVERLAPPABLE #-} (Sql DBType a, x ~ Expr a) => ToExprs a x where
77− fromIdentity (HType (Result a)) = a
78− toIdentity = HType . Result
77+ fromResult (HType (Result a)) = a
78+ toResult = HType . Result
7979
8080
8181instance (Sql DBType a, x ~ [a]) => ToExprs [a] (Expr x) where
82− fromIdentity (HType (Result a)) = a
83− toIdentity = HType . Result
82+ fromResult (HType (Result a)) = a
83+ toResult = HType . Result
8484
8585
8686instance (Sql DBType a, NotNull a, x ~ Maybe a) => ToExprs (Maybe a) (Expr x)
8787 where
88− fromIdentity (HType (Result a)) = a
89− toIdentity = HType . Result
88+ fromResult (HType (Result a)) = a
89+ toResult = HType . Result
9090
9191
9292instance (Sql DBType a, NotNull a, x ~ NonEmpty a) => ToExprs (NonEmpty a) (Expr x)
9393 where
94− fromIdentity (HType (Result a)) = a
95− toIdentity = HType . Result
94+ fromResult (HType (Result a)) = a
95+ toResult = HType . Result
9696
9797
9898instance (ToExprs a exprs1, ToExprs b exprs2, x ~ EitherTable exprs1 exprs2) =>
9999 ToExprs (Either a b) x
100100 where
101− fromIdentity =
102− bimap (fromIdentity' @exprs1) (fromIdentity' @exprs2) .
101+ fromResult =
102+ bimap (fromResult' @exprs1) (fromResult' @exprs2) .
103103 fromColumns
104− toIdentity =
104+ toResult =
105105 toColumns .
106− bimap (toIdentity' @exprs1) (toIdentity' @exprs2)
106+ bimap (toResult' @exprs1) (toResult' @exprs2)
107107
108108
109109instance ToExprs a exprs => ToExprs [a] (ListTable exprs) where
110− fromIdentity = fmap (fromIdentity' @exprs) . fromColumns
111− toIdentity = toColumns . fmap (toIdentity' @exprs)
110+ fromResult = fmap (fromResult' @exprs) . fromColumns
111+ toResult = toColumns . fmap (toResult' @exprs)
112112
113113
114114instance ToExprs a exprs => ToExprs (Maybe a) (MaybeTable exprs) where
115− fromIdentity = fmap (fromIdentity' @exprs) . fromColumns
116− toIdentity = toColumns . fmap (toIdentity' @exprs)
115+ fromResult = fmap (fromResult' @exprs) . fromColumns
116+ toResult = toColumns . fmap (toResult' @exprs)
117117
118118
119119instance ToExprs a exprs => ToExprs (NonEmpty a) (NonEmptyTable exprs)
120120 where
121− fromIdentity = fmap (fromIdentity' @exprs) . fromColumns
122− toIdentity = toColumns . fmap (toIdentity' @exprs)
121+ fromResult = fmap (fromResult' @exprs) . fromColumns
122+ toResult = toColumns . fmap (toResult' @exprs)
123123
124124
125125instance (ToExprs a exprs1, ToExprs b exprs2, x ~ TheseTable exprs1 exprs2) =>
126126 ToExprs (These a b) x
127127 where
128− fromIdentity =
129− bimap (fromIdentity' @exprs1) (fromIdentity' @exprs2) .
128+ fromResult =
129+ bimap (fromResult' @exprs1) (fromResult' @exprs2) .
130130 fromColumns
131− toIdentity =
131+ toResult =
132132 toColumns .
133− bimap (toIdentity' @exprs1) (toIdentity' @exprs2)
133+ bimap (toResult' @exprs1) (toResult' @exprs2)
134134
135135
136136instance (ToExprs a exprs1, ToExprs b exprs2, x ~ (exprs1, exprs2)) =>
137137 ToExprs (a, b) x
138138 where
139− fromIdentity (HPair a b) =
140− ( fromIdentity' @exprs1 $ hunlabel unlabeler a
141− , fromIdentity' @exprs2 $ hunlabel unlabeler b
139+ fromResult (HPair a b) =
140+ ( fromResult' @exprs1 $ hunlabel unlabeler a
141+ , fromResult' @exprs2 $ hunlabel unlabeler b
142142 )
143− toIdentity (a, b) = HPair
144− { hfst = hlabel labeler $ toIdentity' @exprs1 a
145− , hsnd = hlabel labeler $ toIdentity' @exprs2 b
143+ toResult (a, b) = HPair
144+ { hfst = hlabel labeler $ toResult' @exprs1 a
145+ , hsnd = hlabel labeler $ toResult' @exprs2 b
146146 }
147147
148148
@@ -153,15 +153,15 @@ instance
153153 , x ~ (exprs1, exprs2, exprs3)
154154 ) => ToExprs (a, b, c) x
155155 where
156− fromIdentity (HTrio a b c) =
157− ( fromIdentity' @exprs1 $ hunlabel unlabeler a
158− , fromIdentity' @exprs2 $ hunlabel unlabeler b
159− , fromIdentity' @exprs3 $ hunlabel unlabeler c
156+ fromResult (HTrio a b c) =
157+ ( fromResult' @exprs1 $ hunlabel unlabeler a
158+ , fromResult' @exprs2 $ hunlabel unlabeler b
159+ , fromResult' @exprs3 $ hunlabel unlabeler c
160160 )
161− toIdentity (a, b, c) = HTrio
162− { hfst = hlabel labeler $ toIdentity' @exprs1 a
163− , hsnd = hlabel labeler $ toIdentity' @exprs2 b
164− , htrd = hlabel labeler $ toIdentity' @exprs3 c
161+ 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
165165 }
166166
167167
@@ -173,17 +173,17 @@ instance
173173 , x ~ (exprs1, exprs2, exprs3, exprs4)
174174 ) => ToExprs (a, b, c, d) x
175175 where
176− fromIdentity (HQuartet a b c d) =
177− ( fromIdentity' @exprs1 $ hunlabel unlabeler a
178− , fromIdentity' @exprs2 $ hunlabel unlabeler b
179− , fromIdentity' @exprs3 $ hunlabel unlabeler c
180− , fromIdentity' @exprs4 $ hunlabel unlabeler d
176+ 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
181181 )
182− toIdentity (a, b, c, d) = HQuartet
183− { hfst = hlabel labeler $ toIdentity' @exprs1 a
184− , hsnd = hlabel labeler $ toIdentity' @exprs2 b
185− , htrd = hlabel labeler $ toIdentity' @exprs3 c
186− , hfrt = hlabel labeler $ toIdentity' @exprs4 d
182+ 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
187187 }
188188
189189
@@ -196,47 +196,47 @@ instance
196196 , x ~ (exprs1, exprs2, exprs3, exprs4, exprs5)
197197 ) => ToExprs (a, b, c, d, e) x
198198 where
199− fromIdentity (HQuintet a b c d e) =
200− ( fromIdentity' @exprs1 $ hunlabel unlabeler a
201− , fromIdentity' @exprs2 $ hunlabel unlabeler b
202− , fromIdentity' @exprs3 $ hunlabel unlabeler c
203− , fromIdentity' @exprs4 $ hunlabel unlabeler d
204− , fromIdentity' @exprs5 $ hunlabel unlabeler e
199+ 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
205205 )
206− toIdentity (a, b, c, d, e) = HQuintet
207− { hfst = hlabel labeler $ toIdentity' @exprs1 a
208− , hsnd = hlabel labeler $ toIdentity' @exprs2 b
209− , htrd = hlabel labeler $ toIdentity' @exprs3 c
210− , hfrt = hlabel labeler $ toIdentity' @exprs4 d
211− , hfft = hlabel labeler $ toIdentity' @exprs5 e
206+ 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
212212 }
213213
214214
215−instance (HTable t, result ~ Col Identity, x ~ t (Col Expr)) =>
215+instance (HTable t, result ~ Col Result, x ~ t (Col Expr)) =>
216216 ToExprs (t result) x
217217 where
218− fromIdentity = id
219− toIdentity = id
218+ fromResult = id
219+ toResult = id
220220
221221
222−instance (Recontextualize Identity Expr (t Identity) (t Expr), result ~ Identity, x ~ t Expr) =>
222+instance (Recontextualize Result Expr (t Result) (t Expr), result ~ Result, x ~ t Expr) =>
223223 ToExprs (t result) x
224224 where
225− fromIdentity = fromColumns
226− toIdentity = toColumns
225+ fromResult = fromColumns
226+ toResult = toColumns
227227
228228
229229instance (KnownSpec spec, x ~ Col Expr spec) =>
230− ToExprs (Col Identity spec) x
230+ ToExprs (Col Result spec) x
231231 where
232− fromIdentity = fromColumns
233− toIdentity = toColumns
232+ fromResult = fromColumns
233+ toResult = toColumns
234234
235235
236236type FromExprs :: Type -> Type
237237type family FromExprs a
238238type instance FromExprs (Expr a) = a
239−type instance FromExprs (Col Expr spec) = Col Identity spec
239+type instance FromExprs (Col Expr spec) = Col Result spec
240240type instance FromExprs (EitherTable a b) = Either (FromExprs a) (FromExprs b)
241241type instance FromExprs (ListTable a) = [FromExprs a]
242242type instance FromExprs (MaybeTable a) = Maybe (FromExprs a)
@@ -248,8 +248,8 @@ type instance FromExprs (a, b, c, d) =
248248 (FromExprs a, FromExprs b, FromExprs c, FromExprs d)
249249type instance FromExprs (a, b, c, d, e) =
250250 (FromExprs a, FromExprs b, FromExprs c, FromExprs d, FromExprs e)
251−type instance FromExprs (t Expr) = t Identity
252−type instance FromExprs (t (Col Expr)) = t (Col Identity)
251+type instance FromExprs (t Expr) = t Result
252+type instance FromExprs (t (Col Expr)) = t (Col Result)
253253
254254
255255-- | @Serializable@ witnesses the one-to-one correspondence between the type
@@ -264,24 +264,24 @@ instance {-# OVERLAPPING #-} Sql DBType a => Serializable (Expr a) a
264264-- | Use @lit@ to turn literal Haskell values into expressions. @lit@ is
265265-- capable of lifting single @Expr@s to full tables.
266266lit :: forall exprs a. Serializable exprs a => a -> exprs
267−lit = fromColumns . litHTable . toIdentity' @exprs
267+lit = fromColumns . litHTable . toResult' @exprs
268268
269269
270270parse :: forall exprs a. Serializable exprs a => Hasql.Row a
271−parse = fromIdentity' @exprs <$> parseHTable
271+parse = fromResult' @exprs <$> parseHTable
272272
273273
274274type Encodes :: Type -> Type -> Constraint
275275class Serializable exprs a => Encodes a exprs | a -> exprs, exprs -> a
276276
277277
278−instance KnownSpec spec => Encodes (Col Identity spec) (Col Expr spec)
278+instance KnownSpec spec => Encodes (Col Result spec) (Col Expr spec)
279279
280280
281−instance Serializable (t Identity) (t Expr) => Encodes (t Expr) (t Identity)
281+instance Serializable (t Result) (t Expr) => Encodes (t Expr) (t Result)
282282
283283
284−instance HTable t => Encodes (t (Col Identity)) (t (Col Expr))
284+instance HTable t => Encodes (t (Col Result)) (t (Col Expr))
285285
286286
287287instance (Encodes a x, Encodes b y) => Encodes (Either a b) (EitherTable x y)
@@ -318,14 +318,14 @@ litTable :: Encodes a exprs => a -> exprs
318318litTable = lit
319319
320320
321−litHTable :: HTable t => t (Col Identity) -> t (Col Expr)
321+litHTable :: HTable t => t (Col Result) -> t (Col Expr)
322322litHTable as = htabulate $ \field ->
323323 case hfield hspecs field of
324324 SSpec {nullity, info} -> case hfield as field of
325325 Result value -> DB (slitExpr nullity info value)
326326
327327
328−parseHTable :: HTable t => Hasql.Row (t (Col Identity))
328+parseHTable :: HTable t => Hasql.Row (t (Col Result))
329329parseHTable = unwrapApplicative $ htabulateA $ \field ->
330330 WrapApplicative $ case hfield hspecs field of
331331 SSpec {nullity, info} -> Result <$> sparseValue nullity info