@@ -36,8 +36,9 @@ parseDataDeclaration = do
3636 reserved "data"
3737 name <- indented *> properName
3838 tyArgs <- many (indented *> identifier)
39− _ <- lexeme $ indented *> P.char '='
40− ctors <- sepBy1 ((,) <$> properName <*> P.many (indented *> parseTypeAtom)) pipe
39+ ctors <- P.option [] $ do
40+ _ <- lexeme $ indented *> P.char '='
41+ sepBy1 ((,) <$> properName <*> P.many (indented *> parseTypeAtom)) pipe
4142 return $ DataDeclaration name tyArgs ctors
4243
4344parseTypeDeclaration :: P.Parsec String ParseState Declaration
@@ -94,9 +95,10 @@ parseTypeClassDeclaration :: P.Parsec String ParseState Declaration
9495parseTypeClassDeclaration = do
9596 reserved "class"
9697 className <- indented *> properName
97− idents <- indented *> P.many identifier
98− indented *> reserved "where"
99− members <- mark (P.many (same *> parseTypeDeclaration))
98+ idents <- P.many (indented *> identifier)
99+ members <- P.option [] . P.try $ do
100+ indented *> reserved "where"
101+ mark (P.many (same *> parseTypeDeclaration))
100102 return $ TypeClassDeclaration className idents members
101103
102104parseTypeInstanceDeclaration :: P.Parsec String ParseState Declaration
@@ -108,9 +110,10 @@ parseTypeInstanceDeclaration = do
108110 reservedOp "=>"
109111 return deps
110112 className <- indented *> parseQualified properName
111− ty <- indented *> P.many parseTypeAtom
112− indented *> reserved "where"
113− members <- mark (P.many (same *> parseValueDeclaration))
113+ ty <- P.many (indented *> parseTypeAtom)
114+ members <- P.option [] . P.try $ do
115+ indented *> reserved "where"
116+ mark (P.many (same *> parseValueDeclaration))
114117 return $ TypeInstanceDeclaration (fromMaybe [] deps) className ty members
115118
116119-- |