@@ -98,9 +98,9 @@ data InstanceEx :: * where
98
98
-> InstanceEx
99
99
100
100
101
- -- | Converts an algebra into a presentation: adds one equation per fact in the algebra
102
- -- and one generator per element. Presentations in this form are called saturated because
103
- -- they are maximally large without being redundant. @I(fk.x) = I(fk)(I(x))@
101
+ -- | Converts an algebra into a presentation: adds one equation per fact in the algebra,
102
+ -- and one generator per element. Presentations in this form are called saturated because
103
+ -- they are maximally large without being redundant. @I(fk.x) = I(fk)(I(x))@
104
104
algebraToPresentation :: (MultiTyMap '[Show , Ord , NFData ] '[var , ty , sym , en , fk , att , gen , sk ], Ord y , Ord x )
105
105
=> Algebra var ty sym en fk att gen sk x y
106
106
-> Presentation var ty sym en fk att x y
@@ -240,7 +240,7 @@ initialInstance p dp' sch = Instance sch p dp'' $ initialAlgebra
240
240
nf'''' (Left g) = Sk $ MkTalgGen $ Left g
241
241
nf'''' (Right (gt, att)) = Sk $ MkTalgGen $ Right (gt, att)
242
242
243
- -- repr'''' :: TalgGen en fk att gen sk -> Term Void ty sym en fk att gen sk
243
+ repr'''' :: TalgGen en fk att gen sk -> Term Void ty sym en fk att gen sk
244
244
repr'''' (MkTalgGen (Left g)) = Sk g
245
245
repr'''' (MkTalgGen (Right (x, att))) = Att att $ upp x
246
246
@@ -417,12 +417,12 @@ evalInstanceRaw' sch (InstExpRaw' _ gens0 eqs' _ _) is = do
417
417
rest <- transEq gens' sks' eqs''
418
418
pure $ Set. insert (EQ (lhs', rhs')) rest
419
419
420
- -- transPath :: forall en fk gen . [String] -> RawTerm -> Err (Term Void Void Void en fk Void Gen Void )
420
+ transPath :: forall var' ty' sym' en' att' . [String ] -> RawTerm -> Err (Term var' ty' sym' en' fk att' String Sk )
421
421
transPath gens' (RawApp x [] ) | elem x gens' = pure $ Gen x
422
422
transPath gens' (RawApp x [a]) | elem' x (Map. keys $ sch_fks sch) = Fk (fromJust $ cast x) <$> transPath gens' a
423
423
transPath _ x = Left $ " cannot type " ++ show x
424
424
425
- -- transTerm :: forall ty sym en fk att Gen Sk . [String] -> [String] -> RawTerm -> Err (Term Void ty sym en fk att Gen Sk)
425
+ transTerm :: [String ] -> [String ] -> RawTerm -> Err (Term Void ty sym en fk att Gen Sk )
426
426
transTerm gens' _ (RawApp x [] ) | elem x gens' = pure $ Gen x
427
427
transTerm _ sks' (RawApp x [] ) | elem x sks' = pure $ Sk x
428
428
transTerm gens' _ (RawApp x [a]) | elem' x (Map. keys $ sch_fks sch) = Fk (fromJust $ cast x) <$> transPath gens' a
@@ -462,23 +462,28 @@ evalInstanceRaw ops ty' t is = do
462
462
463
463
-- | The empty instance on a schema has no data, so the types of its generators and carriers are 'Void'.
464
464
emptyInstance :: Schema var ty sym en fk att -> Instance var ty sym en fk att Void Void Void Void
465
- emptyInstance ts'' = Instance ts''
465
+ emptyInstance ts'' =
466
+ Instance
467
+ ts''
466
468
(Presentation Map. empty Map. empty Set. empty)
467
469
(const undefined )
468
470
(Algebra ts''
469
471
(const Set. empty) (const undefined ) (const undefined ) (const undefined )
470
472
(const Set. empty) (const undefined ) (const undefined )
471
473
Set. empty)
472
474
473
- -- | Pivots an instance. The returned schema will not have strings as fks etc, so it will be impossible to write a literal on it, at least for now.
474
- -- (Java CQL hacks around this by landing on String.)
475
- pivot :: forall var ty sym en fk att gen sk x y
475
+ -- | Pivot an instance. The returned schema will not have strings as fks etc, so it will be impossible to write a literal on it, at least for now.
476
+ -- (Java CQL hacks around this by landing on String.)
477
+ pivot
478
+ :: forall var ty sym en fk att gen sk x y
476
479
. (MultiTyMap '[Show , Ord , Typeable ] '[var , ty , sym , en , fk , att , gen , sk , x , y ])
477
- => Instance var ty sym en fk att gen sk x y
478
- -> (Schema var ty sym (x , en ) (x , fk ) (x , att )
479
- , Instance var ty sym (x , en ) (x , fk ) (x , att ) (x , en ) y (x , en ) y
480
- , Mapping var ty sym (x , en ) (x , fk ) (x , att ) en fk att )
481
- pivot (Instance sch _ idp (Algebra _ ens _ fk fn tys nnf rep2'' teqs)) = (sch', inst, mapp)
480
+ => Instance var ty sym en fk att gen sk x y
481
+ -> ( Schema var ty sym (x , en ) (x , fk ) (x , att )
482
+ , Instance var ty sym (x , en ) (x , fk ) (x , att ) (x , en ) y (x , en ) y
483
+ , Mapping var ty sym (x , en ) (x , fk ) (x , att ) en fk att
484
+ )
485
+ pivot (Instance sch _ idp (Algebra _ ens _ fk fn tys nnf rep2'' teqs)) =
486
+ (sch', inst, mapp)
482
487
where
483
488
sch'_ens = Set. fromList [ (x, en) | en <- Set. toList (Schema. ens sch), x <- Set. toList (ens en)]
484
489
sch'_fks = Map. fromList [ ((x, fk0 ), ((x, en), (fk fk0 x, en'))) | en <- Set. toList (Schema. ens sch), x <- Set. toList (ens en), (fk0, en') <- fksFrom' sch en ]
@@ -536,7 +541,6 @@ pivot (Instance sch _ idp (Algebra _ ens _ fk fn tys nnf rep2'' teqs)) = (sch',
536
541
Fk (_, f) a -> Fk f $ instToInst a
537
542
Gen (x, _) -> upp $ fn x
538
543
539
- -- coproducts, etc
540
544
541
545
---------------------------------------------------------------------------------------------------------------
542
546
-- Functorial data migration
@@ -551,7 +555,6 @@ subs (Mapping _ _ ens' fks' atts') (Presentation gens' sks' eqs') = Presentation
551
555
gens'' = Map. map (\ k -> ens' ! k) gens'
552
556
eqs'' = Set. map (\ (EQ (l, r)) -> EQ (changeEn fks' atts' l, changeEn fks' atts' r)) eqs'
553
557
554
-
555
558
changeEn
556
559
:: (Ord k1 , Ord k2 , Eq var )
557
560
=> Map k1 (Term () Void Void en1 fk Void Void Void )
0 commit comments