@@ -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