summaryrefslogtreecommitdiff
path: root/src/GF/Grammar
diff options
context:
space:
mode:
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)]