diff --git a/parser.hs b/parser.hs index 8664a6a..c87ae2e 100644 --- a/parser.hs +++ b/parser.hs @@ -39,9 +39,19 @@ block = do reserved "end" return $ Block lst +intPattern = fmap IntP integer +varPattern = fmap VarP identifier + +consPattern = do + x <- intPattern <|> varPattern + symbol "::" + y <- pattern + return $ ConsP x y + pattern = option UnitP $ - fmap VarP identifier - <|> fmap IntP integer + try consPattern + <|> varPattern + <|> intPattern patterns = sepBy pattern (symbol ",")