@@ -120,19 +120,17 @@ type family GGConstructable' algebra rep where
120120
121121
122122type GGConstruct :: K.Algebra -> (K.Context -> Exp (Type -> Type)) -> Type -> Type
123−type family GGConstruct algebra rep a where
124− GGConstruct 'K.Product rep a = GConstruct TUnreify (Eval (rep (Reify Expr))) a
125− GGConstruct 'K.Sum rep a =
126− -- Ideally this would be as follows, but GHC complains about "illegal polymorphic type"
127− -- (forall r. GConstructADT TUnreify (Eval (rep (Reify Expr))) r r) -> a
128− GConstructADT TUnreify (Eval (rep (Reify Expr))) a a -> a
123+type family GGConstruct algebra rep r where
124+ GGConstruct 'K.Product rep r = GConstruct TUnreify (Eval (rep (Reify Expr))) r -> r
125+ GGConstruct 'K.Sum rep r = GConstructADT TUnreify (Eval (rep (Reify Expr))) r r
129126
130127
131128ggconstruct :: forall algebra rep a. GGConstructable algebra rep
132129 => (Eval (GGColumns algebra TColumns (Eval (rep (Reify Result)))) (Col Expr) -> a)
133− -> GGConstruct algebra rep a
134−ggconstruct gfromColumns = case algebraSing @algebra of
130+ -> GGConstruct algebra rep a -> a
131+ggconstruct gfromColumns f = case algebraSing @algebra of
135132 SProduct ->
133+ f $
136134 gtabulate @TUnreify @(Eval (rep (Reify Expr))) @a $
137135 gfromColumns .
138136 hunreify .
@@ -143,7 +141,7 @@ ggconstruct gfromColumns = case algebraSing @algebra of
143141 @(Col (Reify Expr))
144142 @(Eval (rep (Reify Expr)))
145143 (\(_ :: proxy x) -> toColumns . reify @_ @x Refl)
146− SSum -> \f ->
144+ SSum ->
147145 gcindex @TUnreify @(Eval (rep (Reify Expr))) @a f $
148146 fmap (gfromColumns . hunreify) $
149147 gconstructADT
@@ -207,19 +205,20 @@ ggdeconstruct gtoColumns = case algebraSing @algebra of
207205
208206
209207type GGInsert :: K.Algebra -> (K.Context -> Exp (Type -> Type)) -> Type -> Type
210−type family GGInsert algebra rep a where
211− GGInsert 'K.Product rep a = GConstruct TUnreify (Eval (rep (Reify Insert))) a
212− GGInsert 'K.Sum rep a =
213− -- Ideally this would be as follows, but GHC complains about "illegal polymorphic type"
214− -- (forall r. GConstructADT TUnreify (Eval (rep (Reify Insert))) r r) -> a
215− GConstructADT TUnreify (Eval (rep (Reify Insert))) a a -> a
208+type family GGInsert algebra rep r where
209+ GGInsert 'K.Product rep r =
210+ GConstruct TUnreify (Eval (rep (Reify Insert))) r -> r
211+ GGInsert 'K.Sum rep r =
212+ GConstructADT TUnreify (Eval (rep (Reify Insert))) r r
216213
217214
218215gginsert :: forall algebra rep a. GGConstructable algebra rep
219216 => (Eval (GGColumns algebra TColumns (Eval (rep (Reify Result)))) (Col Insert) -> a)
220217 -> GGInsert algebra rep a
221−gginsert gfromColumns = case algebraSing @algebra of
218+ -> a
219+gginsert gfromColumns f = case algebraSing @algebra of
222220 SProduct ->
221+ f $
223222 gtabulate @TUnreify @(Eval (rep (Reify Insert))) @a $
224223 gfromColumns .
225224 hunreify .
@@ -230,7 +229,7 @@ gginsert gfromColumns = case algebraSing @algebra of
230229 @(Col (Reify Insert))
231230 @(Eval (rep (Reify Insert)))
232231 (\(_ :: proxy x) -> toColumns . reify @_ @x Refl)
233− SSum -> \f ->
232+ SSum ->
234233 gcindex @TUnreify @(Eval (rep (Reify Insert))) @a f $
235234 fmap (gfromColumns . hunreify) $
236235 gconstructADT