on master help sign in
Correct pattern parsing error in which arg-less constructors would capture the remaining patterns.
commit25c70dfb94c34c77153880c72b22db2d3c5478b8 authorevancz <info@elm-lang.org> dateWed 10 Oct 2012, 14:39 (14 years ago) parent254dabf
1 file changed+6−4
elm/src/Parse/Patterns.hs+6−4
elm/src/Parse/Patterns.hs+6−4
@@ -2,7 +2,7 @@ module Patterns (patternTerm, patternExpr, makeLambda, flattenPatterns) where
22
33import Ast
44import Data.Char (isUpper)
5−import Control.Applicative ((<$>))
5+import Control.Applicative ((<$>),(<*>))
66import Control.Monad
77import Text.Parsec
88import ParseLib
@@ -11,8 +11,7 @@ patternBasic :: Monad m => ParsecT [Char] u m Pattern
1111patternBasic =
1212 choice [ char '_' >> return PAnything
1313 , do x@(c:_) <- var
14− if isUpper c then PData x <$> spacePrefix patternTerm
15− else return $ PVar x
14+ return $ if isUpper c then PData x [] else PVar x
1615 ]
1716
1817patternTuple :: Monad m => ParsecT [Char] u m Pattern
@@ -25,8 +24,11 @@ patternList = plist <$> braces (commaSep patternExpr)
2524patternTerm :: Monad m => ParsecT [Char] u m Pattern
2625patternTerm = patternTuple <|> patternList <|> patternBasic <?> "pattern"
2726
27+patternConstructor :: Monad m => ParsecT [Char] u m Pattern
28+patternConstructor = PData <$> capVar <*> spacePrefix patternTerm
29+
2830patternExpr :: Monad m => ParsecT [Char] u m Pattern
29−patternExpr = foldr1 pcons <$> consSep1 patternTerm <?> "pattern"
31+patternExpr = foldr1 pcons <$> consSep1 (patternConstructor <|> patternTerm) <?> "pattern"
3032
3133
3234makeLambda pats body = foldr Lambda (makeBody pats body) (map getName pats)