17
17
18
18
module Language.Instance where
19
19
20
+ import Control.DeepSeq
20
21
import qualified Data.Foldable as Foldable
21
22
import Data.List hiding (intercalate )
22
23
import Data.Map.Strict (Map , unionWith , (!) )
@@ -37,7 +38,6 @@ import Language.Typeside as Typeside
37
38
import Prelude hiding (EQ )
38
39
import qualified Text.Tabular as T
39
40
import qualified Text.Tabular.AsciiArt as Ascii
40
- import Control.DeepSeq
41
41
42
42
43
43
@@ -108,7 +108,7 @@ down1 _ = error "Anomaly: please report. Function name: down1."
108
108
109
109
-- | Checks that an instance satisfies its schema.
110
110
checkSatisfaction
111
- :: (ShowOrdN '[ var , ty , sym , en , fk , att , gen , sk , x , y ] )
111
+ :: (Show ty , Show sym , Show en , Show fk , Show att , Show gen , Show sk , Ord x )
112
112
=> Instance var ty sym en fk att gen sk x y
113
113
-> Err ()
114
114
checkSatisfaction (Instance sch pres' dp' alg) = do
@@ -160,7 +160,7 @@ aSk :: Algebra var ty sym en fk att gen sk x y -> sk -> Term Void ty sym Void Vo
160
160
aSk alg g = nf'' alg $ Sk g
161
161
162
162
163
- instance (NFData var , NFData ty , NFData sym , NFData en , NFData fk , NFData att , NFData gen , NFData sk , NFData x , NFData y )
163
+ instance (NFData var , NFData ty , NFData sym , NFData en , NFData fk , NFData att , NFData x , NFData y )
164
164
=> NFData (Algebra var ty sym en fk att gen sk x y )
165
165
where
166
166
rnf (Algebra s0 e0 nf0 repr0 ty0 nf1 repr1 eqs1) = deepseq s0 $ f e0 $ deepseq nf0 $ deepseq repr0
@@ -198,7 +198,7 @@ instance (NFData var, NFData ty, NFData sym, NFData en, NFData fk, NFData att, N
198
198
=> NFData (Instance var ty sym en fk att gen sk x y ) where
199
199
rnf (Instance s0 p0 dp0 a0) = deepseq s0 $ deepseq p0 $ deepseq dp0 $ rnf a0
200
200
201
- instance (NFData var , NFData ty , NFData sym , NFData en , NFData fk , NFData att , NFData gen , NFData sk )
201
+ instance (NFData ty , NFData sym , NFData en , NFData fk , NFData att , NFData gen , NFData sk )
202
202
=> NFData (Presentation var ty sym en fk att gen sk ) where
203
203
rnf (Presentation g s e) = deepseq g $ deepseq s $ rnf e
204
204
@@ -211,7 +211,7 @@ data InstanceEx :: * where
211
211
212
212
-- | Converts an instance to a presentation.
213
213
instToCol
214
- :: (ShowOrdN '[var , ty , sym , en , fk , att , gen , sk ] )
214
+ :: (ShowOrdN '[var , ty , sym , en , fk , att ], Ord gen , Ord sk )
215
215
=> Schema var ty sym en fk att
216
216
-> Presentation var ty sym en fk att gen sk
217
217
-> Collage (() + var ) ty sym en fk att gen sk
@@ -225,7 +225,7 @@ instToCol sch (Presentation gens' sks' eqs') =
225
225
226
226
227
227
-- | Converts an instance into a presentation: adds one equation per fact in the algebra.
228
- algebraToPresentation :: (ShowOrdN '[ var , ty , sym , en , fk , att , gen , sk ] , Ord y , Ord x )
228
+ algebraToPresentation :: (Ord ty , Ord sym , Ord en , Ord fk , Ord att , Ord y , Ord x )
229
229
=> Algebra var ty sym en fk att gen sk x y
230
230
-> Presentation var ty sym en fk att x y
231
231
algebraToPresentation (alg@ (Algebra sch en' _ _ ty' _ _ _)) = Presentation gens' sks' eqs'
@@ -352,9 +352,9 @@ instance (Show en, Show fk, Show att, Show gen, Show sk) => Show (TalgGen en fk
352
352
353
353
deriving instance (Ord en , Ord fk , Ord att , Ord gen , Ord sk ) => Ord (TalgGen en fk att gen sk )
354
354
355
- deriving instance (Eq en , Eq fk , Eq att , Eq gen , Eq sk ) => Eq (TalgGen en fk att gen sk )
355
+ deriving instance (Eq fk , Eq att , Eq gen , Eq sk ) => Eq (TalgGen en fk att gen sk )
356
356
357
- assembleGens :: (ShowOrdN '[var , ty , sym , en , fk , att , gen , sk ], Eq en )
357
+ assembleGens :: (ShowOrdN '[var , ty , sym , en , fk , att , gen , sk ])
358
358
=> Collage var ty sym en fk att gen sk -> [Carrier en fk gen ] -> Map en (Set (Carrier en fk gen ))
359
359
assembleGens col [] = Map. fromList $ Prelude. map (\ x -> (x,Set. empty)) $ Set. toList $ cens col
360
360
assembleGens col (e: tl) = Map. insert t (Set. insert e s) m
@@ -363,7 +363,7 @@ assembleGens col (e:tl) = Map.insert t (Set.insert e s) m
363
363
s = fromJust $ Map. lookup t m
364
364
365
365
close
366
- :: (ShowOrdN '[var , ty , sym , en , fk , att , gen , sk ], Eq en )
366
+ :: (ShowOrdN '[var , ty , sym , en , fk , att , gen , sk ])
367
367
=> Collage var ty sym en fk att gen sk
368
368
-> (EQ var ty sym en fk att gen sk -> Bool )
369
369
-> [Term Void Void Void en fk Void gen Void ]
@@ -385,7 +385,7 @@ dedup :: (EQ var ty sym en fk att gen sk -> Bool)
385
385
-> [Term Void Void Void en fk Void gen Void ]
386
386
dedup dp' = nubBy (\ x y -> dp' (EQ (upp x, upp y)))
387
387
388
- close1 :: (ShowOrdN '[var , ty , sym , en , fk , att , gen , sk ], Eq en )
388
+ close1 :: (ShowOrdN '[var , ty , sym , en , fk , att , gen , sk ])
389
389
=> Collage var ty sym en fk att gen sk -> (EQ var ty sym en fk att gen sk -> Bool ) -> Term Void Void Void en fk Void gen Void -> [ (Term Void Void Void en fk Void gen Void ) ]
390
390
close1 col _ e = e: (fmap (\ (x,_) -> Fk x e) l)
391
391
where t = typeOf col e
@@ -422,14 +422,14 @@ instance Deps InstanceExp where
422
422
423
423
getOptionsInstance :: InstanceExp -> [(String , String )]
424
424
getOptionsInstance x = case x of
425
- InstanceVar _ -> []
426
- InstanceInitial _ -> []
427
- InstanceDelta _ _ o -> o
428
- InstanceSigma _ _ o -> o
429
- InstancePi _ _ -> undefined
430
- InstanceEval _ _ -> undefined
431
- InstanceCoEval _ _ -> undefined
432
- InstanceRaw (InstExpRaw' _ _ _ o _) -> o
425
+ InstanceVar _ -> []
426
+ InstanceInitial _ -> []
427
+ InstanceDelta _ _ o -> o
428
+ InstanceSigma _ _ o -> o
429
+ InstancePi _ _ -> undefined
430
+ InstanceEval _ _ -> undefined
431
+ InstanceCoEval _ _ -> undefined
432
+ InstanceRaw (InstExpRaw' _ _ _ o _) -> o
433
433
434
434
435
435
----------------------------------------------------------------------------------------------------------------------
@@ -476,7 +476,7 @@ split'' ens2 tys2 ((w, ei):tl) =
476
476
else Left $ " Not an entity or type: " ++ show ei
477
477
478
478
evalInstanceRaw'
479
- :: forall var ty sym en fk att . (ShowOrdN '[ var , ty , sym , en , fk , att ] , Typeable ty , Typeable sym , Typeable en , Typeable fk , Typeable att )
479
+ :: forall var ty sym en fk att . (Ord ty , Ord sym , Ord en , Ord fk , Ord att , Typeable ty , Typeable sym , Typeable en , Typeable fk , Typeable att )
480
480
=> Schema var ty sym en fk att
481
481
-> InstExpRaw'
482
482
-> [Presentation var ty sym en fk att Gen Sk ]
@@ -567,7 +567,7 @@ emptyInstance ts'' = Instance ts''
567
567
-- Functorial data migration
568
568
569
569
subs
570
- :: (ShowOrdN '[ var , ty , sym , en , fk , att , en' , fk' , att' , gen , sk ], Eq en' )
570
+ :: (Ord ty , Ord sym , Ord en , Ord fk , Ord att , Ord en' , Ord fk' , Ord att' , Ord gen , Ord sk )
571
571
=> Mapping var ty sym en fk att en' fk' att'
572
572
-> Presentation var ty sym en fk att gen sk
573
573
-> Presentation var ty sym en' fk' att' gen sk
@@ -606,7 +606,7 @@ changeEn' fks' atts' t = case t of
606
606
Att h _ -> absurd h
607
607
608
608
evalSigmaInst
609
- :: (ShowOrdN '[var , ty , sym , en , fk , att , en ' , fk' , att' , gen , sk ], Eq x , Eq y , Eq en' )
609
+ :: (ShowOrdN '[var , ty , sym , en' , fk' , att' , gen , sk ], Ord en , Ord fk , Ord att )
610
610
=> Mapping var ty sym en fk att en' fk' att'
611
611
-> Instance var ty sym en fk att gen sk x y -> Options
612
612
-> Err (Instance var ty sym en' fk' att' gen sk (Carrier en' fk' gen ) (TalgGen en' fk' att' gen sk ))
@@ -624,8 +624,7 @@ mapGen _ _ = undefined
624
624
625
625
evalDeltaAlgebra
626
626
:: forall var ty sym en fk att gen sk x y en' fk' att'
627
- . ( Show var , Show ty , Show sym , Show en , Show fk , Show att , Show gen , Show sk , Show x , Show y , Show en' , Show fk' , Show att'
628
- , Ord var , Ord ty , Ord sym , Ord en , Ord fk , Ord att , Ord gen , Ord sk , Ord x , Ord y , Ord en' , Ord fk' , Ord att' )
627
+ . (Ord en , Ord fk , Ord att , Ord x )
629
628
=> Mapping var ty sym en fk att en' fk' att'
630
629
-> Instance var ty sym en' fk' att' gen sk x y
631
630
-> Algebra var ty sym en fk att (en , x ) y (en , x ) y
@@ -651,7 +650,7 @@ evalDeltaAlgebra (Mapping src' _ ens' fks0 atts0)
651
650
652
651
653
652
evalDeltaInst
654
- :: forall var ty sym en fk att gen sk x y en' fk' att' . (ShowOrdN '[ var , ty , sym , en , fk , att , gen , sk , x , y , en' , fk' , att' ] )
653
+ :: forall var ty sym en fk att gen sk x y en' fk' att' . (Ord ty , Ord sym , Ord en , Ord fk , Ord att , Ord x , Ord y )
655
654
=> Mapping var ty sym en fk att en' fk' att'
656
655
-> Instance var ty sym en' fk' att' gen sk x y -> Options
657
656
-> Err (Instance var ty sym en fk att (en ,x ) y (en ,x ) y )
@@ -699,7 +698,7 @@ instance (Show var, Show ty, Show sym, Show en, Show fk, Show att, Show gen, Sho
699
698
prettyTypeEqns = intercalate " \n " (Set. map show teqs')
700
699
701
700
prettyEntity
702
- :: (Show var , Show ty , Show sym , Show en , Show fk , Show att , Show gen , Show sk , Show x , Show y , Eq en )
701
+ :: (Show ty , Show sym , Show en , Show fk , Show att , Show x , Show y , Eq en )
703
702
=> Algebra var ty sym en fk att gen sk x y
704
703
-> en
705
704
-> String
@@ -721,7 +720,7 @@ prettyEntity alg@(Algebra sch en' _ _ _ _ _ _) es =
721
720
722
721
-- TODO unquote identifiers; stick fks and attrs in separate `Group`s?
723
722
prettyEntityTable
724
- :: (Show var , Show ty , Show sym , Show en , Show fk , Show att , Show gen , Show sk , Show x , Show y , Eq en )
723
+ :: (Show ty , Show sym , Show en , Show fk , Show att , Show x , Show y , Eq en )
725
724
=> Algebra var ty sym en fk att gen sk x y
726
725
-> en
727
726
-> String
0 commit comments