on master help sign in
Abstract out "sets of definitions" so that they could potentially be used in `where` clauses.
commitb52df9602a677a39798ff601ceff2f2dd040e8ed authorevancz <info@elm-lang.org> dateSun 7 Oct 2012, 20:34 (14 years ago) parent2caa085
1 file changed+12−9
elm/src/Parse/ParseExpr.hs+12−9
elm/src/Parse/ParseExpr.hs+12−9
@@ -94,18 +94,21 @@ lambdaExpr = do char '\\' <|> char '\x03BB' <?> "anonymous function"
9494 e <- expr
9595 return $ makeLambda pats e
9696
97−letExpr = do
98− reserved "let"
99− brace <- optionMaybe . try $ do
100− whitespace
97+defSet = do
98+ brace <- optionMaybe $ do
10199 char '{' <?> "a set of definitions { x = ... ; y = ... }"
100+ whitespace
102101 case brace of
103− Nothing -> do whitespace; ds <- assignExpr
104− whitespace; reserved "in"; whitespace; Let ds <$> expr
105− Just '{' -> do whitespace ; dss <- semiSep1 assignExpr ; whitespace
102+ Nothing -> assignExpr
103+ Just '{' -> do dss <- semiSep1 assignExpr
104+ whitespace
106105 string "}" <?> "closing bracket '}'"
107− whitespace; reserved "in"; whitespace; e <- expr
108− return $ Let (concat dss) e
106+ return (concat dss)
107+letExpr = do
108+ reserved "let" ; whitespace
109+ defs <- defSet
110+ whitespace ; reserved "in" ; whitespace
111+ Let defs <$> expr
109112
110113caseExpr = do
111114 reserved "case"; whitespace; e <- expr; whitespace; reserved "of"; whitespace