primitive pattern matching

This commit is contained in:
aarne
2007-03-27 20:54:49 +00:00
parent 7c30d211c3
commit fd518ed2a3
9 changed files with 61 additions and 29 deletions

21
devel/compiler/Match.hs Normal file
View File

@@ -0,0 +1,21 @@
module Match where
import AbsSrc
import AbsTgt
import Env
import STM
match :: [Case] -> Exp -> STM Env Exp
match cs v = checks $ map (tryMatch v) cs
---- return substitution
tryMatch :: Exp -> Case -> STM Env Exp
tryMatch e (Cas p v) = if fit (e, p) then return v else raise "no fit" where
fit (exp,patt) = case (exp,patt) of
(ECst c es, PCon d ps) ->
c == d &&
length es == length ps &&
all fit (zip es ps)
(_,PVar _) -> True ---- not is exp contains variables