@@ -1,5 +1,4 @@
1{-# language AllowAmbiguousTypes #-}
1{-# language AllowAmbiguousTypes #-}
2−{-# language ConstraintKinds #-}
3{-# language DataKinds #-}
2{-# language DataKinds #-}
4{-# language DefaultSignatures #-}
3{-# language DefaultSignatures #-}
5{-# language FlexibleContexts #-}
4{-# language FlexibleContexts #-}
@@ -18,6 +17,7 @@ module Rel8.Generic.Rel8able
18 , GColumns, GContext, gfromColumns, gtoColumns
17 , GColumns, GContext, gfromColumns, gtoColumns
19 , GColumnsADT, gfromColumnsADT, gtoColumnsADT
18 , GColumnsADT, gfromColumnsADT, gtoColumnsADT
20 , greify, gunreify
19 , greify, gunreify
@@ -38,16 +38,12 @@ import Rel8.Generic.Table
38 , GAlgebra
38 , GAlgebra
40import qualified Rel8.Generic.Table.ADT as G
40import qualified Rel8.Generic.Table.ADT as G
41−import Rel8.Kind.Algebra
41+import Rel8.Kind.Algebra ( KnownAlgebra )
42− ( SAlgebra( SProduct, SSum )
43− , KnownAlgebra, algebraSing
45import qualified Rel8.Kind.Algebra as K ( Algebra(..) )
42import qualified Rel8.Kind.Algebra as K ( Algebra(..) )
46import Rel8.Schema.Context ( Col )
43import Rel8.Schema.Context ( Col )
47import Rel8.Schema.Context.Label ( Labelable )
44import Rel8.Schema.Context.Label ( Labelable )
48import Rel8.Schema.HTable ( HTable )
45import Rel8.Schema.HTable ( HTable )
49import qualified Rel8.Schema.Kind as K
46import qualified Rel8.Schema.Kind as K
50−import Rel8.Schema.Name ( Name )
51import Rel8.Schema.Reify ( Col( Reify ), Reify, UnwrapReify )
47import Rel8.Schema.Reify ( Col( Reify ), Reify, UnwrapReify )
52import Rel8.Schema.Result ( Result )
48import Rel8.Schema.Result ( Result )
53import Rel8.Table
49import Rel8.Table
@@ -134,11 +130,11 @@ class
134 gunreify :: (Labelable context, Reifiable context)
130 gunreify :: (Labelable context, Reifiable context)
135 => t (Reify context) -> t context
131 => t (Reify context) -> t context
137− type Algebra t = GAlgebra (GRep t (Reify Name))
133+ type Algebra t = GAlgebra (GRep t (Reify Result))
139 type GRep t context = Rep (Record (t context))
135 type GRep t context = Rep (Record (t context))
141− type GColumns t = Eval (GGColumns (Algebra t) TColumns (GRep t (Reify Name)))
137+ type GColumns t = Eval (GGColumns (Algebra t) TColumns (GRep t (Reify Result)))
143 type GContext t context =
139 type GContext t context =
144 Eval (GGContext (Algebra t) TUnreifyContext (GRep t (Reify context)))
140 Eval (GGContext (Algebra t) TUnreifyContext (GRep t (Reify context)))
@@ -149,7 +145,7 @@ class
149 , KnownAlgebra (Algebra t)
145 , KnownAlgebra (Algebra t)
150 , Eval (GGTable (Algebra t) (TTable (Reify context)) TColumns (Col (Reify context)) (GRep t (Reify context)))
146 , Eval (GGTable (Algebra t) (TTable (Reify context)) TColumns (Col (Reify context)) (GRep t (Reify context)))
151 , Eval (GGColumns (Algebra t) TColumns (GRep t (Reify context))) ~ GColumns t
147 , Eval (GGColumns (Algebra t) TColumns (GRep t (Reify context))) ~ GColumns t
152− , Constraints t context
148+ , Eval (GGContext (Algebra t) TUnreifyContext (GRep t (Reify context))) ~ context
154 => GColumns t (Col (Reify context)) -> t (Reify context)
150 => GColumns t (Col (Reify context)) -> t (Reify context)
155 gfromColumns =
151 gfromColumns =
@@ -159,9 +155,8 @@ class
159 @(Algebra t)
155 @(Algebra t)
160 @(TTable (Reify context))
156 @(TTable (Reify context))
161 @TColumns
157 @TColumns
162− @TContext
158+ (\(Reify a) -> a)
163− (fromContext @t @context)
159+ Reify
164− (toContext @t @context)
165 fromColumns
160 fromColumns
167 default gtoColumns :: forall context.
162 default gtoColumns :: forall context.
@@ -170,7 +165,7 @@ class
170 , KnownAlgebra (Algebra t)
165 , KnownAlgebra (Algebra t)
171 , Eval (GGTable (Algebra t) (TTable (Reify context)) TColumns (Col (Reify context)) (GRep t (Reify context)))
166 , Eval (GGTable (Algebra t) (TTable (Reify context)) TColumns (Col (Reify context)) (GRep t (Reify context)))
172 , Eval (GGColumns (Algebra t) TColumns (GRep t (Reify context))) ~ GColumns t
167 , Eval (GGColumns (Algebra t) TColumns (GRep t (Reify context))) ~ GColumns t
173− , Constraints t context
168+ , Eval (GGContext (Algebra t) TUnreifyContext (GRep t (Reify context))) ~ context
175 => t (Reify context) -> GColumns t (Col (Reify context))
170 => t (Reify context) -> GColumns t (Col (Reify context))
176 gtoColumns =
171 gtoColumns =
@@ -178,9 +173,8 @@ class
178 @(Algebra t)
173 @(Algebra t)
179 @(TTable (Reify context))
174 @(TTable (Reify context))
180 @TColumns
175 @TColumns
181− @TContext
176+ (\(Reify a) -> a)
182− (fromContext @t @context)
177+ Reify
183− (toContext @t @context)
184 toColumns .
178 toColumns .
@@ -189,7 +183,6 @@ class
189 ( Generic (Record (t (Reify Result)))
183 ( Generic (Record (t (Reify Result)))
190 , GRep t (Reify Result) ~ Rep (Record (t (Reify Result)))
184 , GRep t (Reify Result) ~ Rep (Record (t (Reify Result)))
191 , G.GTableADT (TTable (Reify Result)) TColumns (Col (Reify Result)) (GRep t (Reify Result))
185 , G.GTableADT (TTable (Reify Result)) TColumns (Col (Reify Result)) (GRep t (Reify Result))
192− , G.GColumnsADT TColumns (GRep t (Reify Result)) ~ GColumnsADT t
194 => GColumnsADT t (Col (Reify Result)) -> t (Reify Result)
187 => GColumnsADT t (Col (Reify Result)) -> t (Reify Result)
195 gfromColumnsADT =
188 gfromColumnsADT =
@@ -206,7 +199,6 @@ class
206 ( Generic (Record (t (Reify Result)))
199 ( Generic (Record (t (Reify Result)))
207 , GRep t (Reify Result) ~ Rep (Record (t (Reify Result)))
200 , GRep t (Reify Result) ~ Rep (Record (t (Reify Result)))
208 , G.GTableADT (TTable (Reify Result)) TColumns (Col (Reify Result)) (GRep t (Reify Result))
201 , G.GTableADT (TTable (Reify Result)) TColumns (Col (Reify Result)) (GRep t (Reify Result))
209− , G.GColumnsADT TColumns (GRep t (Reify Result)) ~ GColumnsADT t
211 => t (Reify Result) -> GColumnsADT t (Col (Reify Result))
203 => t (Reify Result) -> GColumnsADT t (Col (Reify Result))
212 gtoColumnsADT =
204 gtoColumnsADT =
@@ -252,42 +244,8 @@ class
255−type GColumnsADT t = G.GColumnsADT TColumns (GRep t (Reify Name))
247+type GColumnsADT t = G.GColumnsADT TColumns (GRep t (Reify Result))
258data TUnreifyContext :: Type -> Exp K.Context
250data TUnreifyContext :: Type -> Exp K.Context
259type instance Eval (TUnreifyContext a) = UnwrapReify (Eval (TContext a))
251type instance Eval (TUnreifyContext a) = UnwrapReify (Eval (TContext a))
262−type Constraints :: K.Rel8able -> K.Context -> Constraint
263−type Constraints t context = Constraints' (Algebra t) t context
266−type Constraints' :: K.Algebra -> K.Rel8able -> K.Context -> Constraint
267−type family Constraints' algebra t context where
268− Constraints' 'K.Product t context =
269− Eval (GGContext 'K.Product TContext (GRep t (Reify context))) ~
271− Constraints' 'K.Sum _ context = context ~ Result
274−fromContext :: forall t context spec.
275− ( KnownAlgebra (Algebra t)
276− , Constraints t context
278− => Col (Reify context) spec
279− -> Col (Eval (GGContext (Algebra t) TContext (GRep t (Reify context)))) spec
280−fromContext = case algebraSing @(Algebra t) of
282− SSum -> \(Reify a) -> a
285−toContext :: forall t context spec.
286− ( KnownAlgebra (Algebra t)
287− , Constraints t context
289− => Col (Eval (GGContext (Algebra t) TContext (GRep t (Reify context)))) spec
290− -> Col (Reify context) spec
291−toContext = case algebraSing @(Algebra t) of