@@ -60,12 +60,17 @@ parseTypeSynonymDeclaration =
60 <*> (lexeme (indented *> P.char '=') *> parsePolyType)
60 <*> (lexeme (indented *> P.char '=') *> parsePolyType)
62parseValueDeclaration :: P.Parsec String ParseState Declaration
62parseValueDeclaration :: P.Parsec String ParseState Declaration
63−parseValueDeclaration =
63+parseValueDeclaration = do
64− ValueDeclaration <$> parseIdent
64+ name <- parseIdent
66− <*> P.many parseBinderNoParens
65+ binders <- P.many parseBinderNoParens
67− <*> P.optionMaybe parseGuard
66+ guard <- P.optionMaybe parseGuard
68− <*> (lexeme (indented *> P.char '=') *> parseValue)
67+ value <- lexeme (indented *> P.char '=') *> parseValue
68+ whereClause <- P.optionMaybe $ do
72+ C.mark $ P.many1 (C.same *> parseLocalDeclaration)
73+ return $ ValueDeclaration name Value binders guard (maybe value (`Let` value) whereClause)
70parseExternDeclaration :: P.Parsec String ParseState Declaration
75parseExternDeclaration :: P.Parsec String ParseState Declaration
71parseExternDeclaration = P.try (reserved "foreign") *> indented *> reserved "import" *> indented *>
76parseExternDeclaration = P.try (reserved "foreign") *> indented *> reserved "import" *> indented *>