diff options
| author | aarne <aarne@cs.chalmers.se> | 2007-12-06 21:43:21 +0000 |
|---|---|---|
| committer | aarne <aarne@cs.chalmers.se> | 2007-12-06 21:43:21 +0000 |
| commit | 64ebc4f1679b89bccb4328641a2432096e3288b6 (patch) | |
| tree | 53ee2f1b22a4e8b9f92acb256b62d753977b0daa /src/GF/Devel/Grammar/PatternMatch.hs | |
| parent | fe30e3274872db43e96ed9db467e51f12f53effb (diff) | |
new type checker type checks
Diffstat (limited to 'src/GF/Devel/Grammar/PatternMatch.hs')
| -rw-r--r-- | src/GF/Devel/Grammar/PatternMatch.hs | 25 |
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 - |
