pMatch e (PNamed n p) v = do m <- pMatch e p v
                             if m
                                then defineVal e (Define n) v >> return True
                                else return False
pMatch e (PNamed n p) v = do m <- pMatch e p v
                             if m
                                then defineVal e (Define n) v >> return True
                                else return False
pMatch e (PNamed n p) v = do m <- pMatch e p v
                             if m
                                then defineVal e (Define n) v >> return True
                                else return False