[commit: haddock] master: Filter family instances of hidden types (b8efaf4)

git at git.haskell.org git at git.haskell.org
Tue Mar 11 09:49:14 UTC 2014


Repository : ssh://git@git.haskell.org/haddock

On branch  : master
Link       : http://git.haskell.org/haddock.git/commitdiff/b8efaf4ead90c5c95367cc479da522b820b5004e

>---------------------------------------------------------------

commit b8efaf4ead90c5c95367cc479da522b820b5004e
Author: Niklas Haas <git at nand.wakku.to>
Date:   Tue Mar 11 08:42:34 2014 +0100

    Filter family instances of hidden types
    
    Currently, this check does not extend to hidden right hand sides,
    although it probably should hide them in that case.


>---------------------------------------------------------------

b8efaf4ead90c5c95367cc479da522b820b5004e
 CHANGES                                  |    2 +-
 html-test/src/TypeFamilies2.hs           |    8 ++++++++
 src/Haddock/Interface/AttachInstances.hs |   15 +++++++++++----
 3 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/CHANGES b/CHANGES
index e34701c..e067785 100644
--- a/CHANGES
+++ b/CHANGES
@@ -27,7 +27,7 @@ Changes in version 2.14.0
 
  * Properly render License field (#271)
 
- * Print type/data family instances
+ * Print type/data family instances (for exported types only)
 
  * Fix display of poly-kinded type operators (#189)
 
diff --git a/html-test/src/TypeFamilies2.hs b/html-test/src/TypeFamilies2.hs
index 093f77c..34790a5 100644
--- a/html-test/src/TypeFamilies2.hs
+++ b/html-test/src/TypeFamilies2.hs
@@ -3,6 +3,9 @@
 -- in type instances. The expected behaviour is
 -- that we get the instance, Y is not linked and
 -- Haddock shows a linking warning.
+--
+-- The other families and instances that are not exported should not
+-- show up at all
 module TypeFamilies2 (X, Foo, Bar) where
 
 data X
@@ -10,6 +13,11 @@ data Y
 
 type family Foo a
 type instance Foo X = Y
+type instance Foo Y = X -- Should be hidden
 
 data family Bar a
 data instance Bar X = BarX Y
+
+type family Invisible a
+type instance Invisible X = Y
+type instance Invisible Y = X
diff --git a/src/Haddock/Interface/AttachInstances.hs b/src/Haddock/Interface/AttachInstances.hs
index 88512c1..60ae466 100644
--- a/src/Haddock/Interface/AttachInstances.hs
+++ b/src/Haddock/Interface/AttachInstances.hs
@@ -73,6 +73,10 @@ attachToExportItem expInfo iface ifaceMap instIfaceMap export =
                     let fam_insts = [ (synifyFamInst i, n)
                                     | i <- sortBy (comparing instFam) fam_instances
                                     , let n = instLookup instDocMap (getName i) iface ifaceMap instIfaceMap
+                                    , not $ isNameHidden expInfo (fi_fam i)
+                                    , not $ any (isTypeHidden expInfo) (fi_tys i)
+                                    -- Should we check for hidden RHS as well?
+                                    -- Ideally, in that case the RHS should simply not show up
                                     ]
                         cls_insts = [ (synifyInstHead i, instLookup instDocMap n iface ifaceMap instIfaceMap)
                                     | let is = [ (instanceHead' i, getName i) | i <- cls_instances ]
@@ -199,11 +203,11 @@ isInstanceHidden expInfo cls tys =
     instClassHidden = isNameHidden expInfo $ getName cls
 
     instTypeHidden :: Bool
-    instTypeHidden = any typeHidden tys
-
-    nameHidden :: Name -> Bool
-    nameHidden = isNameHidden expInfo
+    instTypeHidden = any (isTypeHidden expInfo) tys
 
+isTypeHidden :: ExportInfo -> Type -> Bool
+isTypeHidden expInfo = typeHidden
+  where
     typeHidden :: Type -> Bool
     typeHidden t =
       case t of
@@ -213,3 +217,6 @@ isInstanceHidden expInfo cls tys =
         FunTy t1 t2 -> typeHidden t1 || typeHidden t2
         ForAllTy _ ty -> typeHidden ty
         LitTy _ -> False
+
+    nameHidden :: Name -> Bool
+    nameHidden = isNameHidden expInfo



More information about the ghc-commits mailing list