summaryrefslogtreecommitdiff
path: root/src/GF/Grammar
diff options
context:
space:
mode:
authorkrasimir <krasimir@chalmers.se>2009-03-16 14:41:49 +0000
committerkrasimir <krasimir@chalmers.se>2009-03-16 14:41:49 +0000
commit9cae779ac513b3bfda9a53a44b0740e7e1b50dde (patch)
treebb9fccb9daac8a32b7a52d8d853e7393a4bf284a /src/GF/Grammar
parenta2c682cf0e88f96afa10546a3d3396db3c85fc12 (diff)
incomplete support for record types in the abstract syntax
Diffstat (limited to 'src/GF/Grammar')
-rw-r--r--src/GF/Grammar/MMacros.hs2
-rw-r--r--src/GF/Grammar/PrGrammar.hs1
-rw-r--r--src/GF/Grammar/Unify.hs1
-rw-r--r--src/GF/Grammar/Values.hs2
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)]