@@ -21,7 +21,6 @@ module Rel8.Table.Serialize
24−import Data.Bifunctor ( bimap )
25import Data.Kind ( Constraint, Type )
24import Data.Kind ( Constraint, Type )
26import Data.List.NonEmpty ( NonEmpty )
25import Data.List.NonEmpty ( NonEmpty )
27import GHC.Generics ( Generic, Rep, from, to )
26import GHC.Generics ( Generic, Rep, from, to )
@@ -46,19 +45,11 @@ import Rel8.Schema.Null ( NotNull, Sql )
46import Rel8.Schema.Result ( Col( Result ), Result )
45import Rel8.Schema.Result ( Col( Result ), Result )
47import Rel8.Schema.Spec ( SSpec(..), KnownSpec )
46import Rel8.Schema.Spec ( SSpec(..), KnownSpec )
48import Rel8.Table ( Table, Columns, fromColumns, toColumns, TColumns )
47import Rel8.Table ( Table, Columns, fromColumns, toColumns, TColumns )
49−import Rel8.Table.Either ( EitherTable )
50−import Rel8.Table.List ( ListTable )
51−import Rel8.Table.Maybe ( MaybeTable )
52−import Rel8.Table.NonEmpty ( NonEmptyTable )
53−import Rel8.Table.These ( TheseTable )
54import Rel8.Type ( DBType )
48import Rel8.Type ( DBType )
56-- semigroupoids
50-- semigroupoids
57import Data.Functor.Apply ( WrappedApplicative(..) )
51import Data.Functor.Apply ( WrappedApplicative(..) )
60−import Data.These ( These )
63type ToExprs :: Type -> Type -> Constraint
54type ToExprs :: Type -> Type -> Constraint
64class Table Expr exprs => ToExprs exprs a where
55class Table Expr exprs => ToExprs exprs a where
@@ -126,44 +117,6 @@ instance (Sql DBType a, NotNull a, x ~ NonEmpty a) => ToExprs (Expr x) (NonEmpty
126 toResult = HType . Result
117 toResult = HType . Result
129−instance (ToExprs exprs1 a, ToExprs exprs2 b, x ~ EitherTable exprs1 exprs2) =>
130− ToExprs x (Either a b)
133− bimap (fromResult @exprs1) (fromResult @exprs2) .
137− bimap (toResult @exprs1) (toResult @exprs2)
140−instance ToExprs exprs a => ToExprs (ListTable exprs) [a] where
141− fromResult = fmap (fromResult @exprs) . fromColumns
142− toResult = toColumns . fmap (toResult @exprs)
145−instance ToExprs exprs a => ToExprs (MaybeTable exprs) (Maybe a) where
146− fromResult = fmap (fromResult @exprs) . fromColumns
147− toResult = toColumns . fmap (toResult @exprs)
150−instance ToExprs exprs a => ToExprs (NonEmptyTable exprs) (NonEmpty a)
152− fromResult = fmap (fromResult @exprs) . fromColumns
153− toResult = toColumns . fmap (toResult @exprs)
156−instance (ToExprs exprs1 a, ToExprs exprs2 b, x ~ TheseTable exprs1 exprs2) =>
157− ToExprs x (These a b)
160− bimap (fromResult @exprs1) (fromResult @exprs2) .
164− bimap (toResult @exprs1) (toResult @exprs2)
167instance (ToExprs exprs1 a, ToExprs exprs2 b, x ~ (exprs1, exprs2)) =>
120instance (ToExprs exprs1 a, ToExprs exprs2 b, x ~ (exprs1, exprs2)) =>
168 ToExprs x (a, b)
121 ToExprs x (a, b)
@@ -241,11 +194,6 @@ type FromExprs :: Type -> Type
241type family FromExprs a
194type family FromExprs a
242type instance FromExprs (Expr a) = a
195type instance FromExprs (Expr a) = a
243type instance FromExprs (Col Expr spec) = Col Result spec
196type instance FromExprs (Col Expr spec) = Col Result spec
244−type instance FromExprs (EitherTable a b) = Either (FromExprs a) (FromExprs b)
245−type instance FromExprs (ListTable a) = [FromExprs a]
246−type instance FromExprs (MaybeTable a) = Maybe (FromExprs a)
247−type instance FromExprs (NonEmptyTable a) = NonEmpty (FromExprs a)
248−type instance FromExprs (TheseTable a b) = These (FromExprs a) (FromExprs b)
249type instance FromExprs (a, b) = (FromExprs a, FromExprs b)
197type instance FromExprs (a, b) = (FromExprs a, FromExprs b)
250type instance FromExprs (a, b, c) = (FromExprs a, FromExprs b, FromExprs c)
198type instance FromExprs (a, b, c) = (FromExprs a, FromExprs b, FromExprs c)
251type instance FromExprs (a, b, c, d) =
199type instance FromExprs (a, b, c, d) =