@@ -16,7 +16,6 @@
16module Rel8.Generic.Construction
16module Rel8.Generic.Construction
17 ( GGBuildable
17 ( GGBuildable
18 , GGBuild, ggbuild
18 , GGBuild, ggbuild
20 , GGConstructable
19 , GGConstructable
21 , GGConstruct, ggconstruct
20 , GGConstruct, ggconstruct
22 , GGDeconstruct, ggdeconstruct
21 , GGDeconstruct, ggdeconstruct
@@ -63,7 +62,6 @@ import qualified Rel8.Kind.Algebra as K
63import Rel8.Schema.Context.Nullify ( runTag )
62import Rel8.Schema.Context.Nullify ( runTag )
64import Rel8.Schema.HTable ( HTable )
63import Rel8.Schema.HTable ( HTable )
65import Rel8.Schema.HTable.Identity ( HIdentity( HType ) )
64import Rel8.Schema.HTable.Identity ( HIdentity( HType ) )
66−import Rel8.Schema.Insert ( Col( I ), Create(..), Insert )
67import qualified Rel8.Schema.Kind as K
65import qualified Rel8.Schema.Kind as K
68import Rel8.Schema.Name ( Col( N ), Name( Name ) )
66import Rel8.Schema.Name ( Col( N ), Name( Name ) )
69import Rel8.Schema.Null ( Nullity( Null, NotNull ) )
67import Rel8.Schema.Null ( Nullity( Null, NotNull ) )
@@ -83,7 +81,6 @@ type GGBuildable algebra name rep =
83 ( KnownAlgebra algebra
81 ( KnownAlgebra algebra
84 , Eval (GGColumns algebra TColumns (Eval (rep (Reify Aggregate)))) ~ Eval (GGColumns algebra TColumns (Eval (rep (Reify Result))))
82 , Eval (GGColumns algebra TColumns (Eval (rep (Reify Aggregate)))) ~ Eval (GGColumns algebra TColumns (Eval (rep (Reify Result))))
85 , Eval (GGColumns algebra TColumns (Eval (rep (Reify Expr)))) ~ Eval (GGColumns algebra TColumns (Eval (rep (Reify Result))))
83 , Eval (GGColumns algebra TColumns (Eval (rep (Reify Expr)))) ~ Eval (GGColumns algebra TColumns (Eval (rep (Reify Result))))
86− , Eval (GGColumns algebra TColumns (Eval (rep (Reify Insert)))) ~ Eval (GGColumns algebra TColumns (Eval (rep (Reify Result))))
87 , Eval (GGColumns algebra TColumns (Eval (rep (Reify Name)))) ~ Eval (GGColumns algebra TColumns (Eval (rep (Reify Result))))
84 , Eval (GGColumns algebra TColumns (Eval (rep (Reify Name)))) ~ Eval (GGColumns algebra TColumns (Eval (rep (Reify Result))))
88 , HTable (Eval (GGColumns algebra TColumns (Eval (rep (Reify Result)))))
85 , HTable (Eval (GGColumns algebra TColumns (Eval (rep (Reify Result)))))
89 , GGBuildable' algebra name rep
86 , GGBuildable' algebra name rep
@@ -94,17 +91,12 @@ type GGBuildable' :: K.Algebra -> Symbol -> (K.Context -> Exp (Type -> Type)) ->
94type family GGBuildable' algebra name rep where
91type family GGBuildable' algebra name rep where
95 GGBuildable' 'K.Product name rep =
92 GGBuildable' 'K.Product name rep =
96 ( name ~ GConstructor (Eval (rep (Reify Expr)))
93 ( name ~ GConstructor (Eval (rep (Reify Expr)))
97− , name ~ GConstructor (Eval (rep (Reify Insert)))
98 , Representable TUnreify (Eval (rep (Reify Expr)))
94 , Representable TUnreify (Eval (rep (Reify Expr)))
99− , Representable TUnreify (Eval (rep (Reify Insert)))
100 , GConstructable (TTable (Reify Expr)) TColumns TUnreify (Col (Reify Expr)) (Eval (rep (Reify Expr)))
95 , GConstructable (TTable (Reify Expr)) TColumns TUnreify (Col (Reify Expr)) (Eval (rep (Reify Expr)))
101− , GConstructable (TTable (Reify Insert)) TColumns TUnreify (Col (Reify Insert)) (Eval (rep (Reify Insert)))
103 GGBuildable' 'K.Sum name rep =
97 GGBuildable' 'K.Sum name rep =
104 ( Representable TUnreify (GConstructorADT name (Eval (rep (Reify Expr))))
98 ( Representable TUnreify (GConstructorADT name (Eval (rep (Reify Expr))))
105− , Representable TUnreify (GConstructorADT name (Eval (rep (Reify Insert))))
106 , GMakeableADT (TTable (Reify Expr)) TColumns TUnreify (Col (Reify Expr)) name (Eval (rep (Reify Expr)))
99 , GMakeableADT (TTable (Reify Expr)) TColumns TUnreify (Col (Reify Expr)) name (Eval (rep (Reify Expr)))
107− , GMakeableADT (TTable (Reify Insert)) TColumns TUnreify (Col (Reify Insert)) name (Eval (rep (Reify Insert)))
@@ -150,56 +142,11 @@ ggbuild gfromColumns = case algebraSing @algebra of
150 (HType . Reify . E . litExpr)
142 (HType . Reify . E . litExpr)
153−type GGInsert :: K.Algebra -> Symbol -> (K.Context -> Exp (Type -> Type)) -> Type -> Type
154−type family GGInsert algebra name rep r where
155− GGInsert 'K.Product _name rep r =
156− GConstruct TUnreify (Eval (rep (Reify Insert))) r
157− GGInsert 'K.Sum name rep r =
158− GConstruct TUnreify (GConstructorADT name (Eval (rep (Reify Insert)))) r
161−gginsert :: forall algebra name rep a. GGBuildable algebra name rep
162− => (Eval (GGColumns algebra TColumns (Eval (rep (Reify Result)))) (Col Insert) -> a)
163− -> GGInsert algebra name rep a
164−gginsert gfromColumns = case algebraSing @algebra of
166− gtabulate @TUnreify @(Eval (rep (Reify Insert))) @a $
170− @(TTable (Reify Insert))
173− @(Col (Reify Insert))
174− @(Eval (rep (Reify Insert)))
175− (\(_ :: proxy x) -> toColumns . reify @_ @x Refl)
177− gtabulate @TUnreify @(GConstructorADT name (Eval (rep (Reify Insert)))) @a $
181− @(TTable (Reify Insert))
184− @(Col (Reify Insert))
186− @(Eval (rep (Reify Insert)))
187− (\(_ :: proxy x) -> toColumns . reify @_ @x Refl)
188− (\SSpec {info} -> Reify $ I (Value (snull info)))
189− (\SSpec {nullity} -> case nullity of
192− Reify (I Default) -> Reify (I Default)
193− Reify (I (Value a)) -> Reify (I (Value (nullify a))))
194− (HType . Reify . I . Value . litExpr)
197type GGConstructable :: K.Algebra -> (K.Context -> Exp (Type -> Type)) -> Constraint
145type GGConstructable :: K.Algebra -> (K.Context -> Exp (Type -> Type)) -> Constraint
198type GGConstructable algebra rep =
146type GGConstructable algebra rep =
199 ( KnownAlgebra algebra
147 ( KnownAlgebra algebra
200 , Eval (GGColumns algebra TColumns (Eval (rep (Reify Aggregate)))) ~ Eval (GGColumns algebra TColumns (Eval (rep (Reify Result))))
148 , Eval (GGColumns algebra TColumns (Eval (rep (Reify Aggregate)))) ~ Eval (GGColumns algebra TColumns (Eval (rep (Reify Result))))
201 , Eval (GGColumns algebra TColumns (Eval (rep (Reify Expr)))) ~ Eval (GGColumns algebra TColumns (Eval (rep (Reify Result))))
149 , Eval (GGColumns algebra TColumns (Eval (rep (Reify Expr)))) ~ Eval (GGColumns algebra TColumns (Eval (rep (Reify Result))))
202− , Eval (GGColumns algebra TColumns (Eval (rep (Reify Insert)))) ~ Eval (GGColumns algebra TColumns (Eval (rep (Reify Result))))
203 , Eval (GGColumns algebra TColumns (Eval (rep (Reify Name)))) ~ Eval (GGColumns algebra TColumns (Eval (rep (Reify Result))))
150 , Eval (GGColumns algebra TColumns (Eval (rep (Reify Name)))) ~ Eval (GGColumns algebra TColumns (Eval (rep (Reify Result))))
204 , HTable (Eval (GGColumns algebra TColumns (Eval (rep (Reify Result)))))
151 , HTable (Eval (GGColumns algebra TColumns (Eval (rep (Reify Result)))))
205 , GGConstructable' algebra rep
152 , GGConstructable' algebra rep
@@ -211,24 +158,19 @@ type family GGConstructable' algebra rep where
211 GGConstructable' 'K.Product rep =
158 GGConstructable' 'K.Product rep =
212 ( Representable TUnreify (Eval (rep (Reify Aggregate)))
159 ( Representable TUnreify (Eval (rep (Reify Aggregate)))
213 , Representable TUnreify (Eval (rep (Reify Expr)))
160 , Representable TUnreify (Eval (rep (Reify Expr)))
214− , Representable TUnreify (Eval (rep (Reify Insert)))
215 , Representable TUnreify (Eval (rep (Reify Name)))
161 , Representable TUnreify (Eval (rep (Reify Name)))
216 , GConstructable (TTable (Reify Aggregate)) TColumns TUnreify (Col (Reify Aggregate)) (Eval (rep (Reify Aggregate)))
162 , GConstructable (TTable (Reify Aggregate)) TColumns TUnreify (Col (Reify Aggregate)) (Eval (rep (Reify Aggregate)))
217 , GConstructable (TTable (Reify Expr)) TColumns TUnreify (Col (Reify Expr)) (Eval (rep (Reify Expr)))
163 , GConstructable (TTable (Reify Expr)) TColumns TUnreify (Col (Reify Expr)) (Eval (rep (Reify Expr)))
218− , GConstructable (TTable (Reify Insert)) TColumns TUnreify (Col (Reify Insert)) (Eval (rep (Reify Insert)))
219 , GConstructable (TTable (Reify Name)) TColumns TUnreify (Col (Reify Name)) (Eval (rep (Reify Name)))
164 , GConstructable (TTable (Reify Name)) TColumns TUnreify (Col (Reify Name)) (Eval (rep (Reify Name)))
221 GGConstructable' 'K.Sum rep =
166 GGConstructable' 'K.Sum rep =
222 ( RepresentableConstructors TUnreify (Eval (rep (Reify Expr)))
167 ( RepresentableConstructors TUnreify (Eval (rep (Reify Expr)))
223− , RepresentableConstructors TUnreify (Eval (rep (Reify Insert)))
224 , RepresentableFields TUnreify (Eval (rep (Reify Aggregate)))
168 , RepresentableFields TUnreify (Eval (rep (Reify Aggregate)))
225 , RepresentableFields TUnreify (Eval (rep (Reify Expr)))
169 , RepresentableFields TUnreify (Eval (rep (Reify Expr)))
226 , RepresentableFields TUnreify (Eval (rep (Reify Name)))
170 , RepresentableFields TUnreify (Eval (rep (Reify Name)))
227 , Functor (GConstructors TUnreify (Eval (rep (Reify Expr))))
171 , Functor (GConstructors TUnreify (Eval (rep (Reify Expr))))
228− , Functor (GConstructors TUnreify (Eval (rep (Reify Insert))))
229 , GConstructableADT (TTable (Reify Aggregate)) TColumns TUnreify (Col (Reify Aggregate)) (Eval (rep (Reify Aggregate)))
172 , GConstructableADT (TTable (Reify Aggregate)) TColumns TUnreify (Col (Reify Aggregate)) (Eval (rep (Reify Aggregate)))
230 , GConstructableADT (TTable (Reify Expr)) TColumns TUnreify (Col (Reify Expr)) (Eval (rep (Reify Expr)))
173 , GConstructableADT (TTable (Reify Expr)) TColumns TUnreify (Col (Reify Expr)) (Eval (rep (Reify Expr)))
231− , GConstructableADT (TTable (Reify Insert)) TColumns TUnreify (Col (Reify Insert)) (Eval (rep (Reify Insert)))
232 , GConstructableADT (TTable (Reify Name)) TColumns TUnreify (Col (Reify Name)) (Eval (rep (Reify Name)))
174 , GConstructableADT (TTable (Reify Name)) TColumns TUnreify (Col (Reify Name)) (Eval (rep (Reify Name)))