on master help sign in
Abstract out "sets of definitions" so that they could potentially be used in `where` clauses.
b52df96evancz
elm/src/Parse/ParseExpr.hs+12−9
@@ -94,18 +94,21 @@ lambdaExpr = do char '\\' <|> char '\x03BB' <?> "anonymous function"
94 e <- expr
94 e <- expr
95 return $ makeLambda pats e
95 return $ makeLambda pats e
96
96
97−letExpr = do
97+defSet = do
98− reserved "let"
99− brace <- optionMaybe . try $ do
98+ brace <- optionMaybe $ do
100− whitespace
101 char '{' <?> "a set of definitions { x = ... ; y = ... }"
99 char '{' <?> "a set of definitions { x = ... ; y = ... }"
100+ whitespace
102 case brace of
101 case brace of
103− Nothing -> do whitespace; ds <- assignExpr
102+ Nothing -> assignExpr
104− whitespace; reserved "in"; whitespace; Let ds <$> expr
105− Just '{' -> do whitespace ; dss <- semiSep1 assignExpr ; whitespace
103+ Just '{' -> do dss <- semiSep1 assignExpr
104+ whitespace
106 string "}" <?> "closing bracket '}'"
105 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
109
112
110caseExpr = do
113caseExpr = do
111 reserved "case"; whitespace; e <- expr; whitespace; reserved "of"; whitespace
114 reserved "case"; whitespace; e <- expr; whitespace; reserved "of"; whitespace