aboutsummaryrefslogtreecommitdiff
path: root/src/Haddock/Backends
diff options
context:
space:
mode:
Diffstat (limited to 'src/Haddock/Backends')
-rw-r--r--src/Haddock/Backends/Html.hs86
1 files changed, 80 insertions, 6 deletions
diff --git a/src/Haddock/Backends/Html.hs b/src/Haddock/Backends/Html.hs
index d30c322f..a0e81edc 100644
--- a/src/Haddock/Backends/Html.hs
+++ b/src/Haddock/Backends/Html.hs
@@ -664,8 +664,9 @@ doDecl summary links x (L loc d) mbDoc instances docMap = doDecl d
ppFunSig summary links loc mbDoc (docNameOrig n) t
doDecl (ForD d) = ppFor summary links loc mbDoc d
- doTyClD d0@(TyData {}) = ppDataDecl summary links instances x loc mbDoc d0
- doTyClD d0@(TySynonym {}) = ppTySyn summary links loc mbDoc d0
+ doTyClD d0@(TyFamily {}) = ppTyFamily summary links x loc mbDoc d0
+ doTyClD d0@(TyData {}) = ppDataDecl summary links instances x loc mbDoc d0
+ doTyClD d0@(TySynonym {}) = ppTySyn summary links loc mbDoc d0
doTyClD d0@(ClassDecl {}) = ppClassDecl summary links instances x loc mbDoc docMap d0
@@ -753,6 +754,79 @@ ppTyNames = map ppTyName
--------------------------------------------------------------------------------
+-- Type families
+--------------------------------------------------------------------------------
+
+
+ppTyFamHeader :: Bool -> TyClDecl DocName -> Html
+ppTyFamHeader summary decl =
+
+ (case tcdFlavour decl of
+ TypeFamily -> keyword "type family"
+ DataFamily -> keyword "data family") <+>
+
+ ppTyClBinderWithVars summary decl <+>
+
+ case tcdKind decl of
+ Just kind -> dcolon <+> ppKind kind
+ Nothing -> empty
+
+
+ppTyFamily :: Bool -> LinksInfo -> Name -> SrcSpan -> Maybe (HsDoc DocName) ->
+ TyClDecl DocName -> HtmlTable
+ppTyFamily summary links name loc mbDoc decl
+
+ | summary = declWithDoc summary links loc name mbDoc
+ (ppShortTyFamilyDecl summary links loc mbDoc decl)
+
+ | otherwise
+ = (if validTable then (</>) else const) header $
+ tda [theclass "body"] << vanillaTable << (
+ doc </>
+ instancesBit
+ )
+ where
+ header = topDeclBox links loc name (ppTyFamHeader summary decl)
+
+ doc = case mbDoc of
+ Just d -> ndocBox (docToHtml d)
+ Nothing -> Html.emptyTable
+
+ instId = collapseId name
+
+ instancesBit
+ | null instances = Html.emptyTable
+ | otherwise
+ = instHdr instId </>
+ tda [theclass "body"] <<
+ collapsed thediv instId (
+ spacedTable1 << (
+ aboves (map (declBox . ppInstHead) instances)
+ )
+ )
+
+ instances = []
+
+ validTable = isJust mbDoc || not (null instances)
+
+
+ppShortTyFamilyDecl :: Bool -> LinksInfo -> SrcSpan ->
+ Maybe (HsDoc DocName) -> TyClDecl DocName -> Html
+ppShortTyFamilyDecl summary links loc mbDoc decl = empty
+
+
+--------------------------------------------------------------------------------
+-- TyClDecl helpers
+--------------------------------------------------------------------------------
+
+
+-- | Print a type family / newtype / data / class binder and its variables
+ppTyClBinderWithVars :: Bool -> TyClDecl DocName -> Html
+ppTyClBinderWithVars summ decl =
+ ppAppDocNameNames summ (unLoc $ tcdLName decl) (tyvarNames $ tcdTyVars decl)
+
+
+--------------------------------------------------------------------------------
-- Type applications
--------------------------------------------------------------------------------
@@ -763,8 +837,8 @@ ppAppNameTypes n ts = ppTypeApp n ts ppDocName ppParendType
-- | Print an application of a DocName and a list of Names
-ppDataClassHead :: Bool -> DocName -> [Name] -> Html
-ppDataClassHead summ n ns =
+ppAppDocNameNames :: Bool -> DocName -> [Name] -> Html
+ppAppDocNameNames summ n ns =
ppTypeApp n ns (ppBinder summ . docNameOcc) ppTyName
@@ -818,7 +892,7 @@ ppPred (HsIParam (IPName n) t)
ppClassHdr summ lctxt n tvs fds =
keyword "class"
<+> (if not . null . unLoc $ lctxt then ppLContext lctxt else empty)
- <+> ppDataClassHead summ n (tyvarNames $ tvs)
+ <+> ppAppDocNameNames summ n (tyvarNames $ tvs)
<+> ppFds fds
ppFds fds =
@@ -1157,7 +1231,7 @@ ppDataHeader summary decl
-- context
ppLContext (tcdCtxt decl) <+>
-- T a b c ..., or a :+: b
- ppDataClassHead summary (unLoc $ tcdLName decl) (tyvarNames $ tcdTyVars decl)
+ ppTyClBinderWithVars summary decl
-- ----------------------------------------------------------------------------