@@ -122,10 +122,10 @@ data DeclarationInfo
122 | TypeSynonymDeclaration [(String, Maybe P.Kind)] P.Type
122 | TypeSynonymDeclaration [(String, Maybe P.Kind)] P.Type
125− -- A type class, with its type arguments and its superclasses. Instances and
125+ -- A type class, with its type arguments, its superclasses and functional
126− -- members are represented as child declarations.
126+ -- dependencies. Instances and members are represented as child declarations.
128− | TypeClassDeclaration [(String, Maybe P.Kind)] [P.Constraint]
128+ | TypeClassDeclaration [(String, Maybe P.Kind)] [P.Constraint] [([String], [String])]
131 -- An operator alias declaration, with the member the alias is for and the
131 -- An operator alias declaration, with the member the alias is for and the
@@ -141,7 +141,7 @@ declInfoToString (ValueDeclaration _) = "value"
141declInfoToString (DataDeclaration _ _) = "data"
141declInfoToString (DataDeclaration _ _) = "data"
142declInfoToString (ExternDataDeclaration _) = "externData"
142declInfoToString (ExternDataDeclaration _) = "externData"
143declInfoToString (TypeSynonymDeclaration _ _) = "typeSynonym"
143declInfoToString (TypeSynonymDeclaration _ _) = "typeSynonym"
144−declInfoToString (TypeClassDeclaration _ _) = "typeClass"
144+declInfoToString (TypeClassDeclaration _ _ _) = "typeClass"
145declInfoToString (AliasDeclaration _ _) = "alias"
145declInfoToString (AliasDeclaration _ _) = "alias"
147isTypeClass :: Declaration -> Bool
147isTypeClass :: Declaration -> Bool
@@ -413,6 +413,7 @@ asDeclarationInfo = do
413 "typeClass" ->
413 "typeClass" ->
414 TypeClassDeclaration <$> key "arguments" asTypeArguments
414 TypeClassDeclaration <$> key "arguments" asTypeArguments
415 <*> key "superclasses" (eachInArray asConstraint)
415 <*> key "superclasses" (eachInArray asConstraint)
416+ <*> keyOrDefault "fundeps" [] asFunDeps
416 "alias" ->
417 "alias" ->
417 AliasDeclaration <$> key "fixity" asFixity
418 AliasDeclaration <$> key "fixity" asFixity
418 <*> key "alias" asFixityAlias
419 <*> key "alias" asFixityAlias
@@ -430,6 +431,11 @@ asKind = fromAesonParser
430asType :: Parse e P.Type
431asType :: Parse e P.Type
431asType = fromAesonParser
432asType = fromAesonParser
434+asFunDeps :: Parse PackageError [([String], [String])]
435+asFunDeps = eachInArray asFunDep
437+ asFunDep = (,) <$> nth 0 (eachInArray asString) <*> nth 1 (eachInArray asString)
433asDataDeclType :: Parse PackageError P.DataDeclType
439asDataDeclType :: Parse PackageError P.DataDeclType
434asDataDeclType =
440asDataDeclType =
435 withString $ \s -> case s of
441 withString $ \s -> case s of
@@ -556,7 +562,7 @@ instance A.ToJSON DeclarationInfo where
556 DataDeclaration ty args -> ["dataDeclType" .= ty, "typeArguments" .= args]
562 DataDeclaration ty args -> ["dataDeclType" .= ty, "typeArguments" .= args]
557 ExternDataDeclaration kind -> ["kind" .= kind]
563 ExternDataDeclaration kind -> ["kind" .= kind]
558 TypeSynonymDeclaration args ty -> ["arguments" .= args, "type" .= ty]
564 TypeSynonymDeclaration args ty -> ["arguments" .= args, "type" .= ty]
559− TypeClassDeclaration args super -> ["arguments" .= args, "superclasses" .= super]
565+ TypeClassDeclaration args super fundeps -> ["arguments" .= args, "superclasses" .= super, "fundeps" .= fundeps]
560 AliasDeclaration fixity alias -> ["fixity" .= fixity, "alias" .= alias]
566 AliasDeclaration fixity alias -> ["fixity" .= fixity, "alias" .= alias]
562instance A.ToJSON ChildDeclarationInfo where
568instance A.ToJSON ChildDeclarationInfo where