@@ -33,6 +33,7 @@ import Language.PureScript.Environment
3333import Language.PureScript.Errors
3434import Language.PureScript.Kinds
3535import Language.PureScript.Names
36+import Language.PureScript.Types
3637import Language.PureScript.Parser.Common
3738import Language.PureScript.Parser.Kinds
3839import Language.PureScript.Parser.Lexer
@@ -174,9 +175,9 @@ parseDeclarationRef =
174175parseTypeClassDeclaration :: TokenParser Declaration
175176parseTypeClassDeclaration = do
176177 reserved "class"
177− implies <- P.option [] $ do
178+ implies <- P.option [] $ P.try $ do
178179 indented
179− implies <- parens (commaSep1 ((,) <$> parseQualified properName <*> P.many (noWildcards parseTypeAtom)))
180+ implies <- P.try (return <$> parseConstraint) <|> parens (commaSep1 parseConstraint)
180181 lfatArrow
181182 return implies
182183 className <- indented *> properName
@@ -185,13 +186,17 @@ parseTypeClassDeclaration = do
185186 indented *> reserved "where"
186187 indented *> mark (P.many (same *> positioned parseTypeDeclaration))
187188 return $ TypeClassDeclaration className idents implies members
189+ where
190+
191+parseConstraint :: TokenParser Constraint
192+parseConstraint = (,) <$> parseQualified properName <*> P.many (noWildcards parseTypeAtom)
188193
189194parseInstanceDeclaration :: TokenParser (TypeInstanceBody -> Declaration)
190195parseInstanceDeclaration = do
191196 reserved "instance"
192197 name <- parseIdent <* indented <* doubleColon
193− deps <- P.optionMaybe $ do
194− deps <- parens (commaSep1 ((,) <$> parseQualified properName <*> P.many (noWildcards parseTypeAtom)))
198+ deps <- P.optionMaybe $ P.try $ do
199+ deps <- P.try (return <$> parseConstraint) <|> parens (commaSep1 parseConstraint)
195200 indented
196201 rfatArrow
197202 return deps