Skip to content

Commit 8c543f2

Browse files
epostmarcosh
authored andcommitted
Rename schToCol -> Schema.toCollage, and refactor. #148
1 parent d537da6 commit 8c543f2

File tree

4 files changed

+30
-17
lines changed

4 files changed

+30
-17
lines changed

src/Language/CQL/Instance/Presentation.hs

+3-2
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ import qualified Data.Set as Set
4747
import Data.Void
4848
import Language.CQL.Collage (Collage(..), typeOfCol)
4949
import Language.CQL.Common (Err, MultiTyMap, TyMap, type (+), section, sepTup, intercalate)
50-
import Language.CQL.Schema (Schema, schToCol)
50+
import Language.CQL.Schema (Schema)
51+
import qualified Language.CQL.Schema as Schema (toCollage)
5152
import Language.CQL.Term as Term
5253
import Prelude hiding (EQ)
5354

@@ -88,6 +89,6 @@ toCollage
8889
toCollage sch (Presentation gens' sks' eqs') =
8990
Collage (Set.union e1 e2) (ctys schcol) (cens schcol) (csyms schcol) (cfks schcol) (catts schcol) gens' sks'
9091
where
91-
schcol = schToCol sch
92+
schcol = Schema.toCollage sch
9293
e1 = Set.map (\( EQ (l,r)) -> (Map.empty, EQ (upp l, upp r))) $ eqs'
9394
e2 = Set.map (\(g, EQ (l,r)) -> (g, EQ (upp l, upp r))) $ ceqs schcol

src/Language/CQL/Mapping.hs

+1-1
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ toMorphism
105105
:: MultiTyMap '[Show, Ord, NFData] '[var, ty, sym, en, fk, att, en', fk', att']
106106
=> Mapping var ty sym en fk att en' fk' att'
107107
-> Morphism var ty sym en fk att Void Void en' fk' att' Void Void
108-
toMorphism (Mapping src' dst' ens' fks' atts') = Morphism (schToCol src') (schToCol dst') ens' fks' atts' Map.empty Map.empty
108+
toMorphism (Mapping src' dst' ens' fks' atts') = Morphism (Schema.toCollage src') (Schema.toCollage dst') ens' fks' atts' Map.empty Map.empty
109109

110110
-- | Checks well-typedness of underlying theory.
111111
typecheckMapping

src/Language/CQL/Schema.hs

+19-14
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,14 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
3939

4040
module Language.CQL.Schema where
4141
import Control.DeepSeq
42+
import Data.Bifunctor (second)
4243
import Data.List (nub)
4344
import Data.Map.Strict as Map
4445
import Data.Maybe
4546
import Data.Set as Set
4647
import Data.Typeable
4748
import Data.Void
49+
import Control.Arrow ((***))
4850
import Language.CQL.Collage (Collage(..), typeOfCol)
4951
import Language.CQL.Common
5052
import Language.CQL.Options
@@ -98,26 +100,29 @@ typecheckSchema
98100
:: (MultiTyMap '[Show, Ord, NFData] '[var, ty, sym, en, fk, att])
99101
=> Schema var ty sym en fk att
100102
-> Err ()
101-
typecheckSchema t = typeOfCol $ schToCol t
103+
typecheckSchema = typeOfCol . toCollage
102104

103105
-- | Converts a schema to a collage.
104-
schToCol
106+
toCollage
105107
:: (MultiTyMap '[Show, Ord, NFData] '[var, ty, sym, en, fk, att])
106-
=> Schema var ty sym en fk att
108+
=> Schema var ty sym en fk att
107109
-> Collage (() + var) ty sym en fk att Void Void
108-
schToCol (Schema ts ens' fks' atts' path_eqs' obs_eqs' _) =
109-
Collage (Set.union e3 $ Set.union e1 e2) (ctys tscol)
110-
ens' (csyms tscol) fks' atts' Map.empty Map.empty
110+
toCollage (Schema ts ens' fks' atts' path_eqs' obs_eqs' _) =
111+
Collage (eqs1 <> eqs2 <> eqs3) (ctys tscol) ens' (csyms tscol) fks' atts' Map.empty Map.empty
111112
where
112113
tscol = tsToCol ts
113-
e1 = Set.map (\(en, EQ (l,r))->(Map.fromList [(Left (),Right en)], EQ (upp l, upp r))) path_eqs'
114-
e2 = Set.map (\(en, EQ (l,r))->(Map.fromList [(Left (),Right en)], EQ (upp l, upp r))) obs_eqs'
115-
e3 = Set.map (\(g,EQ (l,r))->(up1Ctx g, EQ (upp l, upp r))) $ ceqs tscol
116114

117-
up1Ctx :: (Ord var) => Ctx var (ty+Void) -> Ctx (()+var) (ty+x)
118-
up1Ctx g = Map.map (\x -> case x of
119-
Left ty -> Left ty
120-
Right v -> absurd v) $ Map.mapKeys Right g
115+
eqs1 = Set.map (unitCtx *** uppEQ) path_eqs'
116+
eqs2 = Set.map (unitCtx *** uppEQ) obs_eqs'
117+
eqs3 = Set.map (up1Ctx *** uppEQ) (ceqs tscol)
118+
119+
unitCtx en = Map.singleton (Left ()) (Right en)
120+
121+
up1Ctx
122+
:: (Ord var)
123+
=> Ctx var (ty+Void)
124+
-> Ctx (()+var) (ty+x)
125+
up1Ctx ctx = second absurd <$> Map.mapKeys Right ctx
121126

122127
typesideToSchema :: Typeside var ty sym -> Schema var ty sym Void Void Void
123128
typesideToSchema ts'' = Schema ts'' Set.empty Map.empty Map.empty Set.empty Set.empty $ \x _ -> absurd x
@@ -306,7 +311,7 @@ evalSchemaRaw ops ty t a' = do
306311
(a :: [Schema var ty sym En Fk Att]) <- doImports a'
307312
r <- evalSchemaRaw' ty t a
308313
o <- toOptions ops $ schraw_options t
309-
p <- createProver (schToCol r) o
314+
p <- createProver (toCollage r) o
310315
pure $ SchemaEx $ Schema ty (ens r) (fks r) (atts r) (path_eqs r) (obs_eqs r) (mkProver p)
311316
where
312317
mkProver p en (EQ (l,r)) = prove p (Map.fromList [(Left (),Right en)]) (EQ (upp l, upp r))

src/Language/CQL/Term.hs

+7
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,13 @@ instance Up x (x + y) where
367367
instance Up y (x + y) where
368368
upgr = Right
369369

370+
uppEQ
371+
:: ( Up var var', Up ty ty' , Up sym sym', Up en en'
372+
, Up fk fk' , Up att att', Up gen gen', Up sk sk' )
373+
=> EQ var ty sym en fk att gen sk
374+
-> EQ var' ty' sym' en' fk' att' gen' sk'
375+
uppEQ (EQ (l,r)) = EQ (upp l, upp r)
376+
370377
--------------------------------------------------------------------------------------------------------------------
371378
-- Theories
372379

0 commit comments

Comments
 (0)