@@ -36,8 +36,9 @@ parseDataDeclaration = do
36 reserved "data"
36 reserved "data"
37 name <- indented *> properName
37 name <- indented *> properName
38 tyArgs <- many (indented *> identifier)
38 tyArgs <- many (indented *> identifier)
39+ ctors <- P.option [] $ do
39− _ <- lexeme $ indented *> P.char '='
40+ _ <- lexeme $ indented *> P.char '='
40− ctors <- sepBy1 ((,) <$> properName <*> P.many (indented *> parseTypeAtom)) pipe
41+ sepBy1 ((,) <$> properName <*> P.many (indented *> parseTypeAtom)) pipe
41 return $ DataDeclaration name tyArgs ctors
42 return $ DataDeclaration name tyArgs ctors
43parseTypeDeclaration :: P.Parsec String ParseState Declaration
44parseTypeDeclaration :: P.Parsec String ParseState Declaration
@@ -94,9 +95,10 @@ parseTypeClassDeclaration :: P.Parsec String ParseState Declaration
94parseTypeClassDeclaration = do
95parseTypeClassDeclaration = do
95 reserved "class"
96 reserved "class"
96 className <- indented *> properName
97 className <- indented *> properName
97− idents <- indented *> P.many identifier
98+ idents <- P.many (indented *> identifier)
99+ members <- P.option [] . P.try $ do
98− indented *> reserved "where"
100+ indented *> reserved "where"
99− members <- mark (P.many (same *> parseTypeDeclaration))
101+ mark (P.many (same *> parseTypeDeclaration))
100 return $ TypeClassDeclaration className idents members
102 return $ TypeClassDeclaration className idents members
102parseTypeInstanceDeclaration :: P.Parsec String ParseState Declaration
104parseTypeInstanceDeclaration :: P.Parsec String ParseState Declaration
@@ -108,9 +110,10 @@ parseTypeInstanceDeclaration = do
108 reservedOp "=>"
110 reservedOp "=>"
109 return deps
111 return deps
110 className <- indented *> parseQualified properName
112 className <- indented *> parseQualified properName
111− ty <- indented *> P.many parseTypeAtom
113+ ty <- P.many (indented *> parseTypeAtom)
114+ members <- P.option [] . P.try $ do
112− indented *> reserved "where"
115+ indented *> reserved "where"
113− members <- mark (P.many (same *> parseValueDeclaration))
116+ mark (P.many (same *> parseValueDeclaration))
114 return $ TypeInstanceDeclaration (fromMaybe [] deps) className ty members
117 return $ TypeInstanceDeclaration (fromMaybe [] deps) className ty members