diff options
| author | krasimir <krasimir@chalmers.se> | 2009-03-16 14:41:49 +0000 |
|---|---|---|
| committer | krasimir <krasimir@chalmers.se> | 2009-03-16 14:41:49 +0000 |
| commit | 9cae779ac513b3bfda9a53a44b0740e7e1b50dde (patch) | |
| tree | bb9fccb9daac8a32b7a52d8d853e7393a4bf284a /src/GF/Grammar | |
| parent | a2c682cf0e88f96afa10546a3d3396db3c85fc12 (diff) | |
incomplete support for record types in the abstract syntax
Diffstat (limited to 'src/GF/Grammar')
| -rw-r--r-- | src/GF/Grammar/MMacros.hs | 2 | ||||
| -rw-r--r-- | src/GF/Grammar/PrGrammar.hs | 1 | ||||
| -rw-r--r-- | src/GF/Grammar/Unify.hs | 1 | ||||
| -rw-r--r-- | src/GF/Grammar/Values.hs | 2 |
4 files changed, 5 insertions, 1 deletions
diff --git a/src/GF/Grammar/MMacros.hs b/src/GF/Grammar/MMacros.hs index 94bd98c8c..f00859ffd 100644 --- a/src/GF/Grammar/MMacros.hs +++ b/src/GF/Grammar/MMacros.hs @@ -186,6 +186,8 @@ val2expP safe v = case v of VGen i x -> if safe then prtBad "unsafe val2exp" v else return $ Vr $ x --- in editing, no alpha conversions presentv + VRecType xs->do xs <- mapM (\(l,v) -> val2expP safe v >>= \e -> return (l,e)) xs + return (RecType xs) VType -> return typeType where substVal g e = mapPairsM (val2expP safe) g >>= return . (\s -> substTerm [] s e) diff --git a/src/GF/Grammar/PrGrammar.hs b/src/GF/Grammar/PrGrammar.hs index bad356bef..8a203bedc 100644 --- a/src/GF/Grammar/PrGrammar.hs +++ b/src/GF/Grammar/PrGrammar.hs @@ -189,6 +189,7 @@ instance Print Val where prt (VClos env e) = case e of Meta _ -> prt_ e ++ prEnv env _ -> prt_ e ---- ++ prEnv env ---- for debugging + prt (VRecType xs) = prCurly (concat (intersperse "," [prt l ++ "=" ++ prt v | (l,v) <- xs])) prt VType = "Type" prv1 v = case v of diff --git a/src/GF/Grammar/Unify.hs b/src/GF/Grammar/Unify.hs index 7deb5e90a..68f8b3352 100644 --- a/src/GF/Grammar/Unify.hs +++ b/src/GF/Grammar/Unify.hs @@ -65,6 +65,7 @@ unify e1 e2 g = (App c a, App d b) -> case unify c d g of Ok g1 -> unify a b g1 _ -> prtBad "fail unify" e1 + (RecType xs,RecType ys) | xs == ys -> return g _ -> prtBad "fail unify" e1 extend :: Unifier -> MetaSymb -> Term -> Err Unifier diff --git a/src/GF/Grammar/Values.hs b/src/GF/Grammar/Values.hs index c83ced9df..9782db730 100644 --- a/src/GF/Grammar/Values.hs +++ b/src/GF/Grammar/Values.hs @@ -35,7 +35,7 @@ import GF.Grammar.Predef type Exp = Term -data Val = VGen Int Ident | VApp Val Val | VCn QIdent | VType | VClos Env Exp +data Val = VGen Int Ident | VApp Val Val | VCn QIdent | VRecType [(Label,Val)] | VType | VClos Env Exp deriving (Eq,Show) type Env = [(Ident,Val)] |
