aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDavid Waern <david.waern@gmail.com>2008-08-03 16:21:21 +0000
committerDavid Waern <david.waern@gmail.com>2008-08-03 16:21:21 +0000
commitafe8d4399d9f2831d371aa43b910762b9b9e0426 (patch)
tree142752e240db8447852b021a47eb9858560b208a /src
parentad26b0b817460fdc444536f7f5d77d8dd328d7af (diff)
Filter out more declarations and keep only vanilla type sigs in classes
Diffstat (limited to 'src')
-rw-r--r--src/Haddock/Interface/Create.hs23
1 files changed, 18 insertions, 5 deletions
diff --git a/src/Haddock/Interface/Create.hs b/src/Haddock/Interface/Create.hs
index 3fc21342..69dd632f 100644
--- a/src/Haddock/Interface/Create.hs
+++ b/src/Haddock/Interface/Create.hs
@@ -165,6 +165,10 @@ isTyClD (TyClD _) = True
isTyClD _ = False
+isClassD (TyClD d) = isClassDecl d
+isClassD _ = False
+
+
isDoc (DocD _) = True
isDoc _ = False
@@ -216,7 +220,7 @@ declName (SigD sig) = fromJust $ sigNameNoLoc sig
-- | The top-level declarations of a module that we care about,
-- ordered by source location, with documentation attached if it exists.
topDecls :: HsGroup Name -> [DeclWithDoc]
-topDecls = filterDecls . collectDocs . sortByLoc . declsFromGroup
+topDecls = filterClasses . filterDecls . collectDocs . sortByLoc . declsFromGroup
filterOutInstances = filter (\(L _ d, _) -> not (isInstance d))
@@ -279,11 +283,20 @@ warnAboutFilteredDecls mod decls = do
filterDecls :: [DeclWithDoc] -> [DeclWithDoc]
filterDecls decls = filter (isHandled . unL . fst) decls
where
- -- TODO: filter out exactly everything we don't handle
- isHandled (ForD (ForeignExport {})) = False
+ isHandled (ForD (ForeignImport {})) = True
+ isHandled (TyClD {}) = True
+ isHandled (InstD {}) = True
isHandled (SigD d) = isVanillaLSig (reL d)
- isHandled (ValD d) = False
- isHandled _ = True
+ isHandled _ = False
+
+
+-- | Go through all class declarations and filter their sub-declarations
+filterClasses :: [DeclWithDoc] -> [DeclWithDoc]
+filterClasses decls = [ if isClassD d then (L loc (filterClass d), doc) else x
+ | x@(L loc d, doc) <- decls ]
+ where
+ filterClass (TyClD c) =
+ TyClD $ c { tcdSigs = filter isVanillaLSig $ tcdSigs c }
--------------------------------------------------------------------------------