matchAndEvalPatternExpr fname env es (p:ps) = do
    case matchPattern p es of
        Just _ -> do
            wrapped <- subsBinding fname (patternBindings p) es (patternExpr p) 
            eval env wrapped
        Nothing -> matchAndEvalPatternExpr fname env es ps
matchAndEvalPatternExpr fname env es (p:ps) = do
    case matchPattern p es of
        Just _ -> do
            wrapped <- subsBinding fname (patternBindings p) es (patternExpr p) 
            eval env wrapped
        Nothing -> matchAndEvalPatternExpr fname env es ps
matchAndEvalPatternExpr fname env es (p:ps) = do
    case matchPattern p es of
        Just _ -> do
            wrapped <- subsBinding fname (patternBindings p) es (patternExpr p) 
            eval env wrapped
        Nothing -> matchAndEvalPatternExpr fname env es ps