diff options
| author | aarne <aarne@cs.chalmers.se> | 2005-12-11 17:48:55 +0000 |
|---|---|---|
| committer | aarne <aarne@cs.chalmers.se> | 2005-12-11 17:48:55 +0000 |
| commit | 9f867c4922cccb6e61b273a55103e2afaeac4bde (patch) | |
| tree | b31dba589c596b272d0e6ad0fec7079cd0d92ab5 /src/GF/Compile/CheckGrammar.hs | |
| parent | 8ee11c0e7edaa32b606ac96ec24cc2f8d0bca2e3 (diff) | |
float parsing fixed
Diffstat (limited to 'src/GF/Compile/CheckGrammar.hs')
| -rw-r--r-- | src/GF/Compile/CheckGrammar.hs | 44 |
1 files changed, 21 insertions, 23 deletions
diff --git a/src/GF/Compile/CheckGrammar.hs b/src/GF/Compile/CheckGrammar.hs index 08b14e3fb..037d07072 100644 --- a/src/GF/Compile/CheckGrammar.hs +++ b/src/GF/Compile/CheckGrammar.hs @@ -719,42 +719,40 @@ checkEqLType env t u trm = do else raise ("type of" +++ prt trm +++ ": expected" +++ prt t' ++ ", inferred" +++ prt u') where - alpha g t u = case (t,u) of --- quick hack version of TC.eqVal - (Prod x a b, Prod y c d) -> alpha g c a && alpha ((x,y):g) b d - -- contravariance! - ---- this should be made in Rename - (Q m a, Q n b) | a == b -> elem m (allExtendsPlus env n) - || elem n (allExtendsPlus env m) - || m == n --- for Predef - (QC m a, QC n b) | a == b -> elem m (allExtendsPlus env n) - || elem n (allExtendsPlus env m) - (QC m a, Q n b) | a == b -> elem m (allExtendsPlus env n) - || elem n (allExtendsPlus env m) - (Q m a, QC n b) | a == b -> elem m (allExtendsPlus env n) - || elem n (allExtendsPlus env m) + -- t is a subtype of u + --- quick hack version of TC.eqVal + alpha g t u = case (t,u) of - (RecType rs, RecType ts) -> -- and [alpha g a b && l == k --- too strong req - -- | ((l,a),(k,b)) <- zip rs ts] - -- . || -- if fails, try subtyping: - all (\ (l,a) -> + -- contravariance + (Prod x a b, Prod y c d) -> alpha g c a && alpha ((x,y):g) b d + + -- record subtyping + (RecType rs, RecType ts) -> all (\ (l,a) -> any (\ (k,b) -> alpha g a b && l == k) ts) rs - (ExtR r s, ExtR r' s') -> alpha g r r' && alpha g s s' - (ExtR r s, t) -> alpha g r t || alpha g s t - - - -- the following say that Ints n is a subset of Int and of Ints m + -- the following say that Ints n is a subset of Int and of Ints m >= n (App (Q (IC "Predef") (IC "Ints")) (EInt n), App (Q (IC "Predef") (IC "Ints")) (EInt m)) -> m >= n (App (Q (IC "Predef") (IC "Ints")) (EInt n), Q (IC "Predef") (IC "Int")) -> True ---- should check size - (Q (IC "Predef") (IC "Int"), + (Q (IC "Predef") (IC "Int"), ---- why this ???? AR 11/12/2005 App (Q (IC "Predef") (IC "Ints")) (EInt n)) -> True + ---- this should be made in Rename + (Q m a, Q n b) | a == b -> elem m (allExtendsPlus env n) + || elem n (allExtendsPlus env m) + || m == n --- for Predef + (QC m a, QC n b) | a == b -> elem m (allExtendsPlus env n) + || elem n (allExtendsPlus env m) + (QC m a, Q n b) | a == b -> elem m (allExtendsPlus env n) + || elem n (allExtendsPlus env m) + (Q m a, QC n b) | a == b -> elem m (allExtendsPlus env n) + || elem n (allExtendsPlus env m) + (Table a b, Table c d) -> alpha g a c && alpha g b d (Vr x, Vr y) -> x == y || elem (x,y) g || elem (y,x) g _ -> t == u |
