on master help sign in
Changes necessary to allow nesting Lift and HADT inside ListTable
d028b37Shane O'Brien
src/Rel8/Column/Field.hs+1−1
@@ -58,7 +58,7 @@ instance (Reifiable context, KnownNecessity necessity, Sql DBType a) =>
58 Table (Reify context) (AField context necessity a)
58 Table (Reify context) (AField context necessity a)
59 where
59 where
60 type Context (AField context necessity a) = Reify context
60 type Context (AField context necessity a) = Reify context
61− type Columns (AField context necessity a) = HIdentity ('Spec '[""] necessity a)
61+ type Columns (AField context necessity a) = HIdentity ('Spec '[] necessity a)
62 type Unreify (AField context necessity a) = Field context necessity a
62 type Unreify (AField context necessity a) = Field context necessity a
63
63
64 fromColumns (HIdentity (Reify a)) = sfromColumn contextSing a
64 fromColumns (HIdentity (Reify a)) = sfromColumn contextSing a
src/Rel8/Column/List.hs+13−12
@@ -33,10 +33,7 @@ import Rel8.Table
33 )
33 )
34import Rel8.Table.List ( ListTable( ListTable ) )
34import Rel8.Table.List ( ListTable( ListTable ) )
35import Rel8.Table.Recontextualize ( Recontextualize )
35import Rel8.Table.Recontextualize ( Recontextualize )
36−import Rel8.Table.Unreify
37− ( Unreifiability( Unreifiability )
38− , Unreifiable, unreifiability
36+import Rel8.Table.Unreify ( Unreifiability(..), Unreifiable, unreifiability )
39− )
40
37
41
38
42type HList :: K.Context -> Type -> Type
39type HList :: K.Context -> Type -> Type
@@ -129,19 +126,23 @@ stoColumnsList = \case
129 (\(AHList a) -> a)
126 (\(AHList a) -> a)
130
127
131
128
132−sreifyList :: ()
129+sreifyList :: Table (Reify context) a
133 => Unreifiability context a
130 => Unreifiability context a
134 -> HList context (Unreify a)
131 -> HList context (Unreify a)
135 -> AHList context a
132 -> AHList context a
133+sreifyList = \case
134+ UResult -> AHList . fmap (reify Refl)
136−sreifyList (Unreifiability context) =
135+ Unreifiability context ->
137− smapList context (reify Refl) hreify .
136+ smapList context (reify Refl) hreify .
138− AHList
137+ AHList
139
138
140
139
141−sunreifyList :: ()
140+sunreifyList :: Table (Reify context) a
142 => Unreifiability context a
141 => Unreifiability context a
143 -> AHList context a
142 -> AHList context a
144 -> HList context (Unreify a)
143 -> HList context (Unreify a)
145−sunreifyList (Unreifiability context) =
144+sunreifyList = \case
145+ UResult -> fmap (unreify Refl) . (\(AHList a) -> a)
146+ Unreifiability context ->
146− (\(AHList a) -> a) .
147+ (\(AHList a) -> a) .
147− smapList context (unreify Refl) hunreify
148+ smapList context (unreify Refl) hunreify
src/Rel8/Column/NonEmpty.hs+13−12
@@ -34,10 +34,7 @@ import Rel8.Table
34 )
34 )
35import Rel8.Table.NonEmpty ( NonEmptyTable( NonEmptyTable ) )
35import Rel8.Table.NonEmpty ( NonEmptyTable( NonEmptyTable ) )
36import Rel8.Table.Recontextualize ( Recontextualize )
36import Rel8.Table.Recontextualize ( Recontextualize )
37−import Rel8.Table.Unreify
38− ( Unreifiability( Unreifiability )
39− , Unreifiable, unreifiability
37+import Rel8.Table.Unreify ( Unreifiability(..), Unreifiable, unreifiability )
40− )
41
38
42
39
43type HNonEmpty :: K.Context -> Type -> Type
40type HNonEmpty :: K.Context -> Type -> Type
@@ -131,19 +128,23 @@ stoColumnsNonEmpty = \case
131 (\(AHNonEmpty a) -> a)
128 (\(AHNonEmpty a) -> a)
132
129
133
130
134−sreifyNonEmpty :: ()
131+sreifyNonEmpty :: Table (Reify context) a
135 => Unreifiability context a
132 => Unreifiability context a
136 -> HNonEmpty context (Unreify a)
133 -> HNonEmpty context (Unreify a)
137 -> AHNonEmpty context a
134 -> AHNonEmpty context a
135+sreifyNonEmpty = \case
136+ UResult -> AHNonEmpty . fmap (reify Refl)
138−sreifyNonEmpty (Unreifiability context) =
137+ Unreifiability context ->
139− smapNonEmpty context (reify Refl) hreify .
138+ smapNonEmpty context (reify Refl) hreify .
140− AHNonEmpty
139+ AHNonEmpty
141
140
142
141
143−sunreifyNonEmpty :: ()
142+sunreifyNonEmpty :: Table (Reify context) a
144 => Unreifiability context a
143 => Unreifiability context a
145 -> AHNonEmpty context a
144 -> AHNonEmpty context a
146 -> HNonEmpty context (Unreify a)
145 -> HNonEmpty context (Unreify a)
147−sunreifyNonEmpty (Unreifiability context) =
146+sunreifyNonEmpty = \case
147+ UResult -> fmap (unreify Refl) . (\(AHNonEmpty a) -> a)
148+ Unreifiability context ->
148− (\(AHNonEmpty a) -> a) .
149+ (\(AHNonEmpty a) -> a) .
149− smapNonEmpty context (unreify Refl) hunreify
150+ smapNonEmpty context (unreify Refl) hunreify
src/Rel8/Generic/Rel8able/Test.hs+11−3
@@ -7,6 +7,7 @@
7{-# language MultiParamTypeClasses #-}
7{-# language MultiParamTypeClasses #-}
8{-# language StandaloneDeriving #-}
8{-# language StandaloneDeriving #-}
9{-# language TypeFamilies #-}
9{-# language TypeFamilies #-}
10+{-# language UndecidableInstances #-}
10
11
11{-# options_ghc -O0 #-}
12{-# options_ghc -O0 #-}
12
13
@@ -26,7 +27,7 @@ import Rel8
26import Data.Text ( Text )
27import Data.Text ( Text )
27
28
28
29
29−data Table f = Table
30+data TableTest f = TableTest
30 { foo :: Column f Bool
31 { foo :: Column f Bool
31 , bar :: Column f (Maybe Bool)
32 , bar :: Column f (Maybe Bool)
32 }
33 }
@@ -97,6 +98,10 @@ data S3Object = S3Object
97 deriving stock Generic
98 deriving stock Generic
98
99
99
100
101+deriving via HKDT S3Object
102+ instance Table Result S3Object
103+
104+
100deriving via HKDT S3Object
105deriving via HKDT S3Object
101 instance x ~ HKD S3Object Expr => ToExprs x S3Object
106 instance x ~ HKD S3Object Expr => ToExprs x S3Object
102
107
@@ -105,6 +110,10 @@ data HKDSum = HKDSumA Text | HKDSumB Bool Char
105 deriving stock Generic
110 deriving stock Generic
106
111
107
112
113+deriving via HKDT HKDSum
114+ instance Table Result HKDSum
115+
116+
108deriving via HKDT HKDSum
117deriving via HKDT HKDSum
109 instance x ~ HKD HKDSum Expr => ToExprs x HKDSum
118 instance x ~ HKD HKDSum Expr => ToExprs x HKDSum
110
119
@@ -142,8 +151,7 @@ data TableSum f
142data TableProduct f = TableProduct
151data TableProduct f = TableProduct
143 { sum :: HADT f TableSum
152 { sum :: HADT f TableSum
144 , list :: TableList f
153 , list :: TableList f
145− , foos :: HList f (ADT TableSum f)
154+ , foos :: HList f (HADT f TableSum, Lift f HKDSum, HKDTest f)
146− , bars :: HList f (HKD HKDSum f)
147 }
155 }
148 deriving stock Generic
156 deriving stock Generic
149 deriving anyclass Rel8able
157 deriving anyclass Rel8able
src/Rel8/Table/HKD.hs+14−2
@@ -28,6 +28,7 @@ where
28import Data.Kind ( Constraint, Type )
28import Data.Kind ( Constraint, Type )
29import Data.Proxy ( Proxy( Proxy ) )
29import Data.Proxy ( Proxy( Proxy ) )
30import Data.Type.Equality ( (:~:)( Refl ) )
30import Data.Type.Equality ( (:~:)( Refl ) )
31+import Data.Void ( Void )
31import GHC.Generics ( Generic, Rep, from, to )
32import GHC.Generics ( Generic, Rep, from, to )
32import Prelude
33import Prelude
33
34
@@ -62,10 +63,10 @@ import qualified Rel8.Schema.Kind as K
62import Rel8.Schema.HTable ( HTable )
63import Rel8.Schema.HTable ( HTable )
63import Rel8.Schema.Insert ( Insert )
64import Rel8.Schema.Insert ( Insert )
64import Rel8.Schema.Name ( Name )
65import Rel8.Schema.Name ( Name )
65−import Rel8.Schema.Reify ( Col( Reify ), Reify, hreify, hunreify )
66+import Rel8.Schema.Reify ( Col( Reify ), Reify, hreify, hunreify, notReify )
66import Rel8.Schema.Result ( Result )
67import Rel8.Schema.Result ( Result )
67import Rel8.Table
68import Rel8.Table
68− ( Table, Columns
69+ ( Table, Columns, Context, Unreify
69 , fromColumns, toColumns, reify, unreify
70 , fromColumns, toColumns, reify, unreify
70 , TTable, TColumns, TUnreify
71 , TTable, TColumns, TUnreify
71 )
72 )
@@ -138,6 +139,17 @@ newtype HKDT a = HKDT
138 }
139 }
139
140
140
141
142+instance HKDable a => Table Result (HKDT a) where
143+ type Columns (HKDT a) = GColumnsHKD a
144+ type Context (HKDT a) = Result
145+ type Unreify (HKDT a) = Void
146+
147+ fromColumns = HKDT . fromHKD . HKD
148+ toColumns = (\(HKD a) -> a) . toHKD . (\(HKDT a) -> a)
149+ reify = notReify
150+ unreify = notReify
151+
152+
141instance
153instance
142 ( Table Expr (HKD a Expr)
154 ( Table Expr (HKD a Expr)
143 , Columns (HKD a Expr) ~ GColumns (HKD a)
155 , Columns (HKD a Expr) ~ GColumns (HKD a)
src/Rel8/Table/Unreify.hs+5−8
@@ -27,7 +27,7 @@
27-- @Table@)
27-- @Table@)
28
28
29module Rel8.Table.Unreify
29module Rel8.Table.Unreify
30− ( Unreifiable, Unreifiability( Unreifiability ), unreifiability
30+ ( Unreifiable, Unreifiability(..), unreifiability
31 , Unreifies
31 , Unreifies
32 )
32 )
33where
33where
@@ -61,7 +61,6 @@ class
61 , Context a ~ Reify Expr => Unreifier Expr a
61 , Context a ~ Reify Expr => Unreifier Expr a
62 , Context a ~ Reify Insert => Unreifier Insert a
62 , Context a ~ Reify Insert => Unreifier Insert a
63 , Context a ~ Reify Name => Unreifier Name a
63 , Context a ~ Reify Name => Unreifier Name a
64− , Context a ~ Reify Result => Unreifier Result a
65 , (forall ctx. (Context a ~ Reify (Reify ctx), Reifiable ctx) => Unreifier (Reify ctx) a)
64 , (forall ctx. (Context a ~ Reify (Reify ctx), Reifiable ctx) => Unreifier (Reify ctx) a)
66 )
65 )
67 => Unreifiable a
66 => Unreifiable a
@@ -70,7 +69,6 @@ instance
70 , Context a ~ Reify Expr => Unreifier Expr a
69 , Context a ~ Reify Expr => Unreifier Expr a
71 , Context a ~ Reify Insert => Unreifier Insert a
70 , Context a ~ Reify Insert => Unreifier Insert a
72 , Context a ~ Reify Name => Unreifier Name a
71 , Context a ~ Reify Name => Unreifier Name a
73− , Context a ~ Reify Result => Unreifier Result a
74 , (forall ctx. (Context a ~ Reify (Reify ctx), Reifiable ctx) => Unreifier (Reify ctx) a)
72 , (forall ctx. (Context a ~ Reify (Reify ctx), Reifiable ctx) => Unreifier (Reify ctx) a)
75 )
73 )
76 => Unreifiable a
74 => Unreifiable a
@@ -78,14 +76,12 @@ instance
78
76
79type Unreifier :: K.Context -> Type -> Constraint
77type Unreifier :: K.Context -> Type -> Constraint
80class
78class
81− ( Table (Reify context) a
82− , Table context (Unreify a)
79+ ( Table context (Unreify a)
83 , Congruent a (Unreify a)
80 , Congruent a (Unreify a)
84 )
81 )
85 => Unreifier context a
82 => Unreifier context a
86instance
83instance
87− ( Table (Reify context) a
88− , Table context (Unreify a)
84+ ( Table context (Unreify a)
89 , Congruent a (Unreify a)
85 , Congruent a (Unreify a)
90 )
86 )
91 => Unreifier context a
87 => Unreifier context a
@@ -93,6 +89,7 @@ instance
93
89
94type Unreifiability :: K.Context -> Type -> Type
90type Unreifiability :: K.Context -> Type -> Type
95data Unreifiability context a where
91data Unreifiability context a where
92+ UResult :: Unreifiability Result a
96 Unreifiability :: Unreifier context a
93 Unreifiability :: Unreifier context a
97 => SContext context -> Unreifiability context a
94 => SContext context -> Unreifiability context a
98
95
@@ -104,6 +101,6 @@ unreifiability = \case
104 SExpr -> Unreifiability SExpr
101 SExpr -> Unreifiability SExpr
105 SInsert -> Unreifiability SInsert
102 SInsert -> Unreifiability SInsert
106 SName -> Unreifiability SName
103 SName -> Unreifiability SName
107− SResult -> Unreifiability SResult
104+ SResult -> UResult
108 SReify context -> case sReifiable context of
105 SReify context -> case sReifiable context of
109 Dict -> Unreifiability (SReify context)
106 Dict -> Unreifiability (SReify context)