summaryrefslogtreecommitdiff
path: root/src/GF/Devel/Grammar/PatternMatch.hs
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2007-12-06 21:43:21 +0000
committeraarne <aarne@cs.chalmers.se>2007-12-06 21:43:21 +0000
commit64ebc4f1679b89bccb4328641a2432096e3288b6 (patch)
tree53ee2f1b22a4e8b9f92acb256b62d753977b0daa /src/GF/Devel/Grammar/PatternMatch.hs
parentfe30e3274872db43e96ed9db467e51f12f53effb (diff)
new type checker type checks
Diffstat (limited to 'src/GF/Devel/Grammar/PatternMatch.hs')
-rw-r--r--src/GF/Devel/Grammar/PatternMatch.hs25
1 files changed, 7 insertions, 18 deletions
diff --git a/src/GF/Devel/Grammar/PatternMatch.hs b/src/GF/Devel/Grammar/PatternMatch.hs
index 38c20fa98..193694a27 100644
--- a/src/GF/Devel/Grammar/PatternMatch.hs
+++ b/src/GF/Devel/Grammar/PatternMatch.hs
@@ -18,9 +18,9 @@ module GF.Devel.Grammar.PatternMatch (matchPattern,
) where
-import GF.Grammar.Terms
-import GF.Grammar.Macros
-import GF.Grammar.PrGF
+import GF.Devel.Grammar.Terms
+import GF.Devel.Grammar.Macros
+import GF.Devel.Grammar.PrGF
import GF.Infra.Ident
import GF.Data.Operations
@@ -56,15 +56,12 @@ findMatch cases terms = case cases of
tryMatch :: (Patt, Term) -> Err [(Ident, Term)]
tryMatch (p,t) = do
- t' <- termForm t
+ let t' = termForm t
trym p t'
where
isInConstantFormt = True -- tested already
trym p t' =
case (p,t') of
- (PVal _ i, (_,Val _ j,_))
- | i == j -> return []
- | otherwise -> Bad $ "no match of values"
(_,(x,Empty,y)) -> trym p (x,K [],y) -- because "" = [""] = []
(PV IW, _) | isInConstantFormt -> return [] -- optimization with wildcard
(PV x, _) | isInConstantFormt -> return [(x,t)]
@@ -94,7 +91,6 @@ tryMatch (p,t) = do
[(p,snd a) | (l,p) <- r, let Just a = lookup l r']
return (concat matches)
(PT _ p',_) -> trym p' t'
- (_, ([],Alias _ _ d,[])) -> tryMatch (p,d)
-- (PP (IC "Predef") (IC "CC") [p1,p2], ([],K s, [])) -> do
@@ -119,10 +115,11 @@ tryMatch (p,t) = do
] >>
return []
_ -> prtBad "no match in case expr for" t
-
+
+eqStrIdent = (==) ----
+
isInConstantForm :: Term -> Bool
isInConstantForm trm = case trm of
- Cn _ -> True
Con _ -> True
Q _ _ -> True
QC _ _ -> True
@@ -131,7 +128,6 @@ isInConstantForm trm = case trm of
R r -> all (isInConstantForm . snd . snd) r
K _ -> True
Empty -> True
- Alias _ _ t -> isInConstantForm t
EInt _ -> True
_ -> False ---- isInArgVarForm trm
@@ -144,10 +140,3 @@ varsOfPatt p = case p of
PT _ q -> varsOfPatt q
_ -> []
--- | to search matching parameter combinations in tables
-isMatchingForms :: [Patt] -> [Term] -> Bool
-isMatchingForms ps ts = all match (zip ps ts') where
- match (PC c cs, (Cn d, ds)) = c == d && isMatchingForms cs ds
- match _ = True
- ts' = map appForm ts
-