aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md41
-rw-r--r--doc/markup.rst13
-rw-r--r--haddock-api/haddock-api.cabal4
-rw-r--r--haddock-api/src/Haddock/Backends/Hoogle.hs14
-rw-r--r--haddock-api/src/Haddock/Backends/LaTeX.hs123
-rw-r--r--haddock-api/src/Haddock/Backends/Xhtml/Decl.hs130
-rw-r--r--haddock-api/src/Haddock/Backends/Xhtml/Layout.hs33
-rw-r--r--haddock-api/src/Haddock/Convert.hs48
-rw-r--r--haddock-api/src/Haddock/GhcUtils.hs96
-rw-r--r--haddock-api/src/Haddock/Interface/Create.hs7
-rw-r--r--haddock-api/src/Haddock/Types.hs3
-rw-r--r--haddock-library/test/Documentation/Haddock/ParserSpec.hs48
-rw-r--r--haddock-test/src/Test/Haddock.hs4
-rw-r--r--haddock.cabal2
-rw-r--r--hoogle-test/ref/Bug722/test.txt16
-rw-r--r--hoogle-test/ref/Bug806/test.txt1
-rw-r--r--hoogle-test/ref/Bug873/test.txt26
-rw-r--r--hoogle-test/ref/type-sigs/test.txt4
-rw-r--r--hoogle-test/src/Bug722/Bug722.hs13
-rw-r--r--hoogle-test/src/Bug806/Bug806.hs1
-rw-r--r--hoogle-test/src/Bug873/Bug873.hs5
-rw-r--r--html-test/ref/A.html24
-rw-r--r--html-test/ref/Bug280.html4
-rw-r--r--html-test/ref/Bug3.html8
-rw-r--r--html-test/ref/Bug310.html44
-rw-r--r--html-test/ref/Bug387.html16
-rw-r--r--html-test/ref/Bug4.html8
-rw-r--r--html-test/ref/Bug546.html20
-rw-r--r--html-test/ref/Bug548.html270
-rw-r--r--html-test/ref/Bug574.html86
-rw-r--r--html-test/ref/Bug6.html60
-rw-r--r--html-test/ref/Bug613.html10
-rw-r--r--html-test/ref/Bug8.html4
-rw-r--r--html-test/ref/BugDeprecated.html48
-rw-r--r--html-test/ref/BugExportHeadings.html48
-rw-r--r--html-test/ref/Bugs.html4
-rw-r--r--html-test/ref/BundledPatterns.html20
-rw-r--r--html-test/ref/BundledPatterns2.html20
-rw-r--r--html-test/ref/ConstructorArgs.html720
-rw-r--r--html-test/ref/ConstructorPatternExport.html26
-rw-r--r--html-test/ref/DeprecatedFunction.html16
-rw-r--r--html-test/ref/DeprecatedFunction2.html8
-rw-r--r--html-test/ref/DeprecatedFunction3.html8
-rw-r--r--html-test/ref/DeprecatedModule.html4
-rw-r--r--html-test/ref/DeprecatedModule2.html4
-rw-r--r--html-test/ref/DeprecatedNewtype.html16
-rw-r--r--html-test/ref/DeprecatedReExport.html8
-rw-r--r--html-test/ref/DeprecatedRecord.html16
-rw-r--r--html-test/ref/DeprecatedTypeSynonym.html16
-rw-r--r--html-test/ref/Examples.html16
-rw-r--r--html-test/ref/FunArgs.html16
-rw-r--r--html-test/ref/GADTRecords.html32
-rw-r--r--html-test/ref/GadtConstructorArgs.html192
-rw-r--r--html-test/ref/Hash.html96
-rw-r--r--html-test/ref/HiddenInstances.html26
-rw-r--r--html-test/ref/Hyperlinks.html8
-rw-r--r--html-test/ref/Instances.html398
-rw-r--r--html-test/ref/Math.html8
-rw-r--r--html-test/ref/ModuleWithWarning.html4
-rw-r--r--html-test/ref/NoLayout.html8
-rw-r--r--html-test/ref/OrphanInstances.html4
-rw-r--r--html-test/ref/OrphanInstancesClass.html8
-rw-r--r--html-test/ref/OrphanInstancesType.html8
-rw-r--r--html-test/ref/PatternSyns.html24
-rw-r--r--html-test/ref/PromotedTypes.html8
-rw-r--r--html-test/ref/Properties.html16
-rw-r--r--html-test/ref/QuantifiedConstraints.html100
-rw-r--r--html-test/ref/QuasiExpr.html80
-rw-r--r--html-test/ref/QuasiQuote.html4
-rw-r--r--html-test/ref/SpuriousSuperclassConstraints.html38
-rw-r--r--html-test/ref/TH.html6
-rw-r--r--html-test/ref/Test.html320
-rw-r--r--html-test/ref/Threaded.html8
-rw-r--r--html-test/ref/Threaded_TH.html12
-rw-r--r--html-test/ref/Ticket112.html4
-rw-r--r--html-test/ref/Ticket75.html8
-rw-r--r--html-test/ref/TitledPicture.html16
-rw-r--r--html-test/ref/TypeFamilies.html98
-rw-r--r--html-test/ref/TypeFamilies2.html18
-rw-r--r--html-test/ref/Unicode.html8
-rw-r--r--html-test/ref/Unicode2.html100
-rw-r--r--html-test/ref/Visible.html6
-rw-r--r--html-test/src/Bug745.hs8
-rw-r--r--html-test/src/ConstructorArgs.hs56
-rw-r--r--html-test/src/GadtConstructorArgs.hs13
-rw-r--r--html-test/src/QuantifiedConstraints.hs11
-rw-r--r--html-test/src/Unicode2.hs18
-rw-r--r--latex-test/ref/ConstructorArgs/ConstructorArgs.tex69
-rw-r--r--latex-test/ref/ConstructorArgs/haddock.sty57
-rw-r--r--latex-test/ref/ConstructorArgs/main.tex11
-rw-r--r--latex-test/ref/GadtConstructorArgs/GadtConstructorArgs.tex25
-rw-r--r--latex-test/ref/GadtConstructorArgs/haddock.sty57
-rw-r--r--latex-test/ref/GadtConstructorArgs/main.tex11
-rw-r--r--latex-test/src/ConstructorArgs/ConstructorArgs.hs56
-rw-r--r--latex-test/src/GadtConstructorArgs/GadtConstructorArgs.hs13
95 files changed, 3658 insertions, 613 deletions
diff --git a/README.md b/README.md
index bfc2261b..51642aab 100644
--- a/README.md
+++ b/README.md
@@ -11,6 +11,32 @@ Full documentation can be found in the `doc/` subdirectory, in
[reStructedText format](http://www.sphinx-doc.org/en/stable/rest.html)
format.
+
+## Project overview
+
+This project consists of three packages:
+
+* haddock
+* haddock-api
+* haddock-library
+
+### haddock
+
+The haddock package provides the `haddock` executable. It is implemented as a
+tiny wrapper around haddock-api's `Documentation.Haddock.haddock` function.
+
+### haddock-api
+
+haddock-api contains the program logic of the `haddock` tool. [The haddocks for
+the `Documentation.Haddock` module](http://hackage.haskell.org/package/haddock-api-2.19.0.1/docs/Documentation-Haddock.html)
+offer a good overview of haddock-api's functionality.
+
+### haddock-library
+
+haddock-library is concerned with the parsing and processing of the Haddock
+markup language.
+
+
## Contributing
Please create issues when you have any problems and pull requests if you have some code.
@@ -33,7 +59,7 @@ and then proceed using your favourite build tool.
```bash
cabal new-build -w ghc-8.4.1
# build & run the test suite
-cabal new-test -w ghc-8.4.1
+cabal new-test -w ghc-8.4.1 all
```
#### Using Cabal sandboxes
@@ -65,11 +91,16 @@ stack test
### Git Branches
If you're a GHC developer and want to update Haddock to work with your
-changes, you should be working on `ghc-head` branch instead of `master`.
+changes, you should be working on `ghc-head` branch.
See instructions at
https://ghc.haskell.org/trac/ghc/wiki/WorkingConventions/Git/Submodules
for an example workflow.
-The `master` branch usually requires a GHC from the latest GHC stable
-branch. The required GHC version can be inferred from the version
-bounds on `ghc` in the respective `.cabal` files.
+### Updating `html-test`
+
+When accepting any changes in the output of `html-test`, it is important
+to use the `--haddock-path` option. For example:
+
+```
+cabal new-run -- html-test --haddock-path $(find dist-newstyle/ -executable -type f -name haddock) --accept
+```
diff --git a/doc/markup.rst b/doc/markup.rst
index 1a278da3..a9878837 100644
--- a/doc/markup.rst
+++ b/doc/markup.rst
@@ -859,10 +859,13 @@ Hyperlinked Identifiers
~~~~~~~~~~~~~~~~~~~~~~~
Referring to a Haskell identifier, whether it be a type, class,
-constructor, or function, is done by surrounding it with single quotes: ::
+constructor, or function, is done by surrounding it with a combination
+of single quotes and backticks. For example: ::
-- | This module defines the type 'T'.
+```T``` is also ok. ``'T``` and ```T'`` are accepted but less common.
+
If there is an entity ``T`` in scope in the current module, then the
documentation will hyperlink the reference in the text to the definition
of ``T`` (if the output format supports hyperlinking, of course; in a
@@ -890,14 +893,6 @@ apostrophes themselves: to hyperlink ``foo'`` one would simply type
``'foo''``. To hyperlink identifiers written in infix form, simply put
them in quotes as always: ``'`elem`'``.
-For compatibility with other systems, the following alternative form of
-markup is accepted [3]_: ```T'``.
-
-.. [3]
- We chose not to use this as the primary markup for identifiers
- because strictly speaking the ````` character should not be used as a
- left quote, it is a grave accent.
-
Emphasis, Bold and Monospaced Text
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/haddock-api/haddock-api.cabal b/haddock-api/haddock-api.cabal
index e1a52824..6a7a932b 100644
--- a/haddock-api/haddock-api.cabal
+++ b/haddock-api/haddock-api.cabal
@@ -42,7 +42,7 @@ library
-- this package typically supports only single major versions
build-depends: base ^>= 4.12.0
, Cabal ^>= 2.3.0
- , ghc ^>= 8.6
+ , ghc ^>= 8.5
, ghc-paths ^>= 0.1.0.9
, haddock-library ^>= 1.6.0
, xhtml ^>= 3000.2.2
@@ -167,7 +167,7 @@ test-suite spec
Haddock.Backends.Hyperlinker.Types
build-depends: Cabal ^>= 2.3
- , ghc ^>= 8.6
+ , ghc ^>= 8.5
, ghc-paths ^>= 0.1.0.9
, haddock-library ^>= 1.6.0
, xhtml ^>= 3000.2.2
diff --git a/haddock-api/src/Haddock/Backends/Hoogle.hs b/haddock-api/src/Haddock/Backends/Hoogle.hs
index 257a8d6d..885c608b 100644
--- a/haddock-api/src/Haddock/Backends/Hoogle.hs
+++ b/haddock-api/src/Haddock/Backends/Hoogle.hs
@@ -46,13 +46,15 @@ prefix = ["-- Hoogle documentation, generated by Haddock"
ppHoogle :: DynFlags -> String -> Version -> String -> Maybe (Doc RdrName) -> [Interface] -> FilePath -> IO ()
ppHoogle dflags package version synopsis prologue ifaces odir = do
- let filename = package ++ ".txt"
+ let -- Since Hoogle is line based, we want to avoid breaking long lines.
+ dflags' = dflags{ pprCols = maxBound }
+ filename = package ++ ".txt"
contents = prefix ++
- docWith dflags (drop 2 $ dropWhile (/= ':') synopsis) prologue ++
+ docWith dflags' (drop 2 $ dropWhile (/= ':') synopsis) prologue ++
["@package " ++ package] ++
["@version " ++ showVersion version
| not (null (versionBranch version)) ] ++
- concat [ppModule dflags i | i <- ifaces, OptHide `notElem` ifaceOptions i]
+ concat [ppModule dflags' i | i <- ifaces, OptHide `notElem` ifaceOptions i]
createDirectoryIfMissing True odir
h <- openFile (odir </> filename) WriteMode
hSetEncoding h utf8
@@ -89,7 +91,7 @@ dropHsDocTy = f
outHsType :: (a ~ GhcPass p, OutputableBndrId a)
=> DynFlags -> HsType a -> String
-outHsType dflags = out dflags . dropHsDocTy
+outHsType dflags = out dflags . reparenType . dropHsDocTy
dropComment :: String -> String
@@ -123,7 +125,7 @@ ppExport dflags ExportDecl { expItemDecl = L _ decl
, expItemMbDoc = (dc, _)
, expItemSubDocs = subdocs
, expItemFixities = fixities
- } = ppDocumentation dflags dc ++ f decl
+ } = ppDocumentation dflags dc ++ f decl ++ ppFixities
where
f (TyClD _ d@DataDecl{}) = ppData dflags d subdocs
f (TyClD _ d@SynDecl{}) = ppSynonym dflags d
@@ -131,7 +133,7 @@ ppExport dflags ExportDecl { expItemDecl = L _ decl
f (TyClD _ (FamDecl _ d)) = ppFam dflags d
f (ForD _ (ForeignImport _ name typ _)) = [pp_sig dflags [name] (hsSigType typ)]
f (ForD _ (ForeignExport _ name typ _)) = [pp_sig dflags [name] (hsSigType typ)]
- f (SigD _ sig) = ppSig dflags sig ++ ppFixities
+ f (SigD _ sig) = ppSig dflags sig
f _ = []
ppFixities = concatMap (ppFixity dflags) fixities
diff --git a/haddock-api/src/Haddock/Backends/LaTeX.hs b/haddock-api/src/Haddock/Backends/LaTeX.hs
index c0da1f0c..4a3e9d03 100644
--- a/haddock-api/src/Haddock/Backends/LaTeX.hs
+++ b/haddock-api/src/Haddock/Backends/LaTeX.hs
@@ -906,24 +906,6 @@ sumParens = ubxparens . hsep . punctuate (text " | ")
-- Stolen from Html and tweaked for LaTeX generation
-------------------------------------------------------------------------------
-
-pREC_TOP, pREC_FUN, pREC_OP, pREC_CON :: Int
-
-pREC_TOP = (0 :: Int) -- type in ParseIface.y in GHC
-pREC_FUN = (1 :: Int) -- btype in ParseIface.y in GHC
- -- Used for LH arg of (->)
-pREC_OP = (2 :: Int) -- Used for arg of any infix operator
- -- (we don't keep their fixities around)
-pREC_CON = (3 :: Int) -- Used for arg of type applicn:
- -- always parenthesise unless atomic
-
-maybeParen :: Int -- Precedence of context
- -> Int -- Precedence of top-level operator
- -> LaTeX -> LaTeX -- Wrap in parens if (ctxt >= op)
-maybeParen ctxt_prec op_prec p | ctxt_prec >= op_prec = parens p
- | otherwise = p
-
-
ppLType, ppLParendType, ppLFunLhType :: Bool -> Located (HsType DocNameI) -> LaTeX
ppLType unicode y = ppType unicode (unLoc y)
ppLParendType unicode y = ppParendType unicode (unLoc y)
@@ -931,72 +913,70 @@ ppLFunLhType unicode y = ppFunLhType unicode (unLoc y)
ppType, ppParendType, ppFunLhType :: Bool -> HsType DocNameI -> LaTeX
-ppType unicode ty = ppr_mono_ty pREC_TOP ty unicode
-ppParendType unicode ty = ppr_mono_ty pREC_CON ty unicode
-ppFunLhType unicode ty = ppr_mono_ty pREC_FUN ty unicode
+ppType unicode ty = ppr_mono_ty (reparenTypePrec PREC_TOP ty) unicode
+ppParendType unicode ty = ppr_mono_ty (reparenTypePrec PREC_TOP ty) unicode
+ppFunLhType unicode ty = ppr_mono_ty (reparenTypePrec PREC_FUN ty) unicode
ppLKind :: Bool -> LHsKind DocNameI -> LaTeX
ppLKind unicode y = ppKind unicode (unLoc y)
ppKind :: Bool -> HsKind DocNameI -> LaTeX
-ppKind unicode ki = ppr_mono_ty pREC_TOP ki unicode
+ppKind unicode ki = ppr_mono_ty (reparenTypePrec PREC_TOP ki) unicode
-- Drop top-level for-all type variables in user style
-- since they are implicit in Haskell
-ppr_mono_lty :: Int -> LHsType DocNameI -> Bool -> LaTeX
-ppr_mono_lty ctxt_prec ty unicode = ppr_mono_ty ctxt_prec (unLoc ty) unicode
-
-
-ppr_mono_ty :: Int -> HsType DocNameI -> Bool -> LaTeX
-ppr_mono_ty ctxt_prec (HsForAllTy _ tvs ty) unicode
- = maybeParen ctxt_prec pREC_FUN $
- sep [ hsep (forallSymbol unicode : ppTyVars tvs) <> dot
- , ppr_mono_lty pREC_TOP ty unicode ]
-ppr_mono_ty ctxt_prec (HsQualTy _ ctxt ty) unicode
- = maybeParen ctxt_prec pREC_FUN $
- sep [ ppLContext ctxt unicode
- , ppr_mono_lty pREC_TOP ty unicode ]
-
-ppr_mono_ty _ (HsBangTy _ b ty) u = ppBang b <> ppLParendType u ty
-ppr_mono_ty _ (HsTyVar _ NotPromoted (L _ name)) _ = ppDocName name
-ppr_mono_ty _ (HsTyVar _ Promoted (L _ name)) _ = char '\'' <> ppDocName name
-ppr_mono_ty ctxt_prec (HsFunTy _ ty1 ty2) u = ppr_fun_ty ctxt_prec ty1 ty2 u
-ppr_mono_ty _ (HsTupleTy _ con tys) u = tupleParens con (map (ppLType u) tys)
-ppr_mono_ty _ (HsSumTy _ tys) u = sumParens (map (ppLType u) tys)
-ppr_mono_ty _ (HsKindSig _ ty kind) u = parens (ppr_mono_lty pREC_TOP ty u <+> dcolon u <+> ppLKind u kind)
-ppr_mono_ty _ (HsListTy _ ty) u = brackets (ppr_mono_lty pREC_TOP ty u)
-ppr_mono_ty _ (HsIParamTy _ (L _ n) ty) u = brackets (ppIPName n <+> dcolon u <+> ppr_mono_lty pREC_TOP ty u)
-ppr_mono_ty _ (HsSpliceTy {}) _ = error "ppr_mono_ty HsSpliceTy"
-ppr_mono_ty _ (HsRecTy {}) _ = text "{..}"
-ppr_mono_ty _ (XHsType (NHsCoreTy {})) _ = error "ppr_mono_ty HsCoreTy"
-ppr_mono_ty _ (HsExplicitListTy _ Promoted tys) u = Pretty.quote $ brackets $ hsep $ punctuate comma $ map (ppLType u) tys
-ppr_mono_ty _ (HsExplicitListTy _ NotPromoted tys) u = brackets $ hsep $ punctuate comma $ map (ppLType u) tys
-ppr_mono_ty _ (HsExplicitTupleTy _ tys) u = Pretty.quote $ parenList $ map (ppLType u) tys
-
-ppr_mono_ty ctxt_prec (HsAppTy _ fun_ty arg_ty) unicode
- = maybeParen ctxt_prec pREC_CON $
- hsep [ppr_mono_lty pREC_FUN fun_ty unicode, ppr_mono_lty pREC_CON arg_ty unicode]
-
-ppr_mono_ty ctxt_prec (HsOpTy _ ty1 op ty2) unicode
- = maybeParen ctxt_prec pREC_FUN $
- ppr_mono_lty pREC_OP ty1 unicode <+> ppr_op <+> ppr_mono_lty pREC_OP ty2 unicode
+ppr_mono_lty :: LHsType DocNameI -> Bool -> LaTeX
+ppr_mono_lty ty unicode = ppr_mono_ty (unLoc ty) unicode
+
+
+ppr_mono_ty :: HsType DocNameI -> Bool -> LaTeX
+ppr_mono_ty (HsForAllTy _ tvs ty) unicode
+ = sep [ hsep (forallSymbol unicode : ppTyVars tvs) <> dot
+ , ppr_mono_lty ty unicode ]
+ppr_mono_ty (HsQualTy _ ctxt ty) unicode
+ = sep [ ppLContext ctxt unicode
+ , ppr_mono_lty ty unicode ]
+ppr_mono_ty (HsFunTy _ ty1 ty2) u
+ = sep [ ppr_mono_lty ty1 u
+ , arrow u <+> ppr_mono_lty ty2 u ]
+
+ppr_mono_ty (HsBangTy _ b ty) u = ppBang b <> ppLParendType u ty
+ppr_mono_ty (HsTyVar _ NotPromoted (L _ name)) _ = ppDocName name
+ppr_mono_ty (HsTyVar _ Promoted (L _ name)) _ = char '\'' <> ppDocName name
+ppr_mono_ty (HsTupleTy _ con tys) u = tupleParens con (map (ppLType u) tys)
+ppr_mono_ty (HsSumTy _ tys) u = sumParens (map (ppLType u) tys)
+ppr_mono_ty (HsKindSig _ ty kind) u = parens (ppr_mono_lty ty u <+> dcolon u <+> ppLKind u kind)
+ppr_mono_ty (HsListTy _ ty) u = brackets (ppr_mono_lty ty u)
+ppr_mono_ty (HsIParamTy _ (L _ n) ty) u = brackets (ppIPName n <+> dcolon u <+> ppr_mono_lty ty u)
+ppr_mono_ty (HsSpliceTy {}) _ = error "ppr_mono_ty HsSpliceTy"
+ppr_mono_ty (HsRecTy {}) _ = text "{..}"
+ppr_mono_ty (XHsType (NHsCoreTy {})) _ = error "ppr_mono_ty HsCoreTy"
+ppr_mono_ty (HsExplicitListTy _ Promoted tys) u = Pretty.quote $ brackets $ hsep $ punctuate comma $ map (ppLType u) tys
+ppr_mono_ty (HsExplicitListTy _ NotPromoted tys) u = brackets $ hsep $ punctuate comma $ map (ppLType u) tys
+ppr_mono_ty (HsExplicitTupleTy _ tys) u = Pretty.quote $ parenList $ map (ppLType u) tys
+
+ppr_mono_ty (HsAppTy _ fun_ty arg_ty) unicode
+ = hsep [ppr_mono_lty fun_ty unicode, ppr_mono_lty arg_ty unicode]
+
+ppr_mono_ty (HsOpTy _ ty1 op ty2) unicode
+ = ppr_mono_lty ty1 unicode <+> ppr_op <+> ppr_mono_lty ty2 unicode
where
ppr_op = if not (isSymOcc occName) then char '`' <> ppLDocName op <> char '`' else ppLDocName op
occName = nameOccName . getName . unLoc $ op
-ppr_mono_ty ctxt_prec (HsParTy _ ty) unicode
--- = parens (ppr_mono_lty pREC_TOP ty)
- = ppr_mono_lty ctxt_prec ty unicode
+ppr_mono_ty (HsParTy _ ty) unicode
+ = parens (ppr_mono_lty ty unicode)
+-- = ppr_mono_lty ty unicode
-ppr_mono_ty ctxt_prec (HsDocTy _ ty _) unicode
- = ppr_mono_lty ctxt_prec ty unicode
+ppr_mono_ty (HsDocTy _ ty _) unicode
+ = ppr_mono_lty ty unicode
-ppr_mono_ty _ (HsWildCardTy (AnonWildCard _)) _ = char '_'
+ppr_mono_ty (HsWildCardTy (AnonWildCard _)) _ = char '_'
-ppr_mono_ty _ (HsTyLit _ t) u = ppr_tylit t u
-ppr_mono_ty _ (HsStarTy _ isUni) unicode = starSymbol (isUni || unicode)
+ppr_mono_ty (HsTyLit _ t) u = ppr_tylit t u
+ppr_mono_ty (HsStarTy _ isUni) unicode = starSymbol (isUni || unicode)
ppr_tylit :: HsTyLit -> Bool -> LaTeX
@@ -1006,15 +986,6 @@ ppr_tylit (HsStrTy _ s) _ = text (show s)
-- XXX: Do something with Unicode parameter?
-ppr_fun_ty :: Int -> LHsType DocNameI -> LHsType DocNameI -> Bool -> LaTeX
-ppr_fun_ty ctxt_prec ty1 ty2 unicode
- = let p1 = ppr_mono_lty pREC_FUN ty1 unicode
- p2 = ppr_mono_lty pREC_TOP ty2 unicode
- in
- maybeParen ctxt_prec pREC_FUN $
- sep [p1, arrow unicode <+> p2]
-
-
-------------------------------------------------------------------------------
-- * Names
-------------------------------------------------------------------------------
diff --git a/haddock-api/src/Haddock/Backends/Xhtml/Decl.hs b/haddock-api/src/Haddock/Backends/Xhtml/Decl.hs
index fdb80141..cc271fef 100644
--- a/haddock-api/src/Haddock/Backends/Xhtml/Decl.hs
+++ b/haddock-api/src/Haddock/Backends/Xhtml/Decl.hs
@@ -620,9 +620,9 @@ ppInstances links origin instances splice unicode pkg qual
-- force Splice = True to use line URLs
where
instName = getOccString origin
- instDecl :: Int -> DocInstance DocNameI -> (SubDecl,Located DocName)
+ instDecl :: Int -> DocInstance DocNameI -> (SubDecl, Maybe Module, Located DocName)
instDecl no (inst, mdoc, loc, mdl) =
- ((ppInstHead links splice unicode qual mdoc origin False no inst mdl), loc)
+ ((ppInstHead links splice unicode qual mdoc origin False no inst mdl), mdl, loc)
ppOrphanInstances :: LinksInfo
@@ -635,9 +635,9 @@ ppOrphanInstances links instances splice unicode pkg qual
instOrigin :: InstHead name -> InstOrigin (IdP name)
instOrigin inst = OriginClass (ihdClsName inst)
- instDecl :: Int -> DocInstance DocNameI -> (SubDecl,Located DocName)
+ instDecl :: Int -> DocInstance DocNameI -> (SubDecl, Maybe Module, Located DocName)
instDecl no (inst, mdoc, loc, mdl) =
- ((ppInstHead links splice unicode qual mdoc (instOrigin inst) True no inst mdl), loc)
+ ((ppInstHead links splice unicode qual mdoc (instOrigin inst) True no inst Nothing), mdl, loc)
ppInstHead :: LinksInfo -> Splice -> Unicode -> Qualification
@@ -1101,38 +1101,18 @@ sumParens = ubxSumList
-- * Rendering of HsType
--------------------------------------------------------------------------------
-
-pREC_TOP, pREC_CTX, pREC_FUN, pREC_OP, pREC_CON :: Int
-
-pREC_TOP = 0 :: Int -- type in ParseIface.y in GHC
-pREC_CTX = 1 :: Int -- Used for single contexts, eg. ctx => type
- -- (as opposed to (ctx1, ctx2) => type)
-pREC_FUN = 2 :: Int -- btype in ParseIface.y in GHC
- -- Used for LH arg of (->)
-pREC_OP = 3 :: Int -- Used for arg of any infix operator
- -- (we don't keep their fixities around)
-pREC_CON = 4 :: Int -- Used for arg of type applicn:
- -- always parenthesise unless atomic
-
-maybeParen :: Int -- Precedence of context
- -> Int -- Precedence of top-level operator
- -> Html -> Html -- Wrap in parens if (ctxt >= op)
-maybeParen ctxt_prec op_prec p | ctxt_prec >= op_prec = parens p
- | otherwise = p
-
-
ppLType, ppLParendType, ppLFunLhType :: Unicode -> Qualification -> HideEmptyContexts -> Located (HsType DocNameI) -> Html
ppLType unicode qual emptyCtxts y = ppType unicode qual emptyCtxts (unLoc y)
ppLParendType unicode qual emptyCtxts y = ppParendType unicode qual emptyCtxts (unLoc y)
ppLFunLhType unicode qual emptyCtxts y = ppFunLhType unicode qual emptyCtxts (unLoc y)
ppCtxType :: Unicode -> Qualification -> HsType DocNameI -> Html
-ppCtxType unicode qual ty = ppr_mono_ty pREC_CTX ty unicode qual HideEmptyContexts
+ppCtxType unicode qual ty = ppr_mono_ty (reparenTypePrec PREC_CTX ty) unicode qual HideEmptyContexts
ppType, ppParendType, ppFunLhType :: Unicode -> Qualification -> HideEmptyContexts -> HsType DocNameI -> Html
-ppType unicode qual emptyCtxts ty = ppr_mono_ty pREC_TOP ty unicode qual emptyCtxts
-ppParendType unicode qual emptyCtxts ty = ppr_mono_ty pREC_CON ty unicode qual emptyCtxts
-ppFunLhType unicode qual emptyCtxts ty = ppr_mono_ty pREC_FUN ty unicode qual emptyCtxts
+ppType unicode qual emptyCtxts ty = ppr_mono_ty (reparenTypePrec PREC_TOP ty) unicode qual emptyCtxts
+ppParendType unicode qual emptyCtxts ty = ppr_mono_ty (reparenTypePrec PREC_CON ty) unicode qual emptyCtxts
+ppFunLhType unicode qual emptyCtxts ty = ppr_mono_ty (reparenTypePrec PREC_FUN ty) unicode qual emptyCtxts
ppHsTyVarBndr :: Unicode -> Qualification -> HsTyVarBndr DocNameI -> Html
ppHsTyVarBndr _ qual (UserTyVar _ (L _ name)) =
@@ -1146,7 +1126,7 @@ ppLKind :: Unicode -> Qualification -> LHsKind DocNameI -> Html
ppLKind unicode qual y = ppKind unicode qual (unLoc y)
ppKind :: Unicode -> Qualification -> HsKind DocNameI -> Html
-ppKind unicode qual ki = ppr_mono_ty pREC_TOP ki unicode qual HideEmptyContexts
+ppKind unicode qual ki = ppr_mono_ty (reparenTypePrec PREC_TOP ki) unicode qual HideEmptyContexts
patSigContext :: LHsType name -> HideEmptyContexts
patSigContext typ | hasNonEmptyContext typ && isFirstContextEmpty typ = ShowEmptyToplevelContexts
@@ -1177,57 +1157,56 @@ ppPatSigType unicode qual typ =
ppForAllPart :: Unicode -> Qualification -> [LHsTyVarBndr DocNameI] -> Html
ppForAllPart unicode qual tvs = hsep (forallSymbol unicode : ppTyVars unicode qual tvs) +++ dot
-ppr_mono_lty :: Int -> LHsType DocNameI -> Unicode -> Qualification -> HideEmptyContexts -> Html
-ppr_mono_lty ctxt_prec ty = ppr_mono_ty ctxt_prec (unLoc ty)
+ppr_mono_lty :: LHsType DocNameI -> Unicode -> Qualification -> HideEmptyContexts -> Html
+ppr_mono_lty ty = ppr_mono_ty (unLoc ty)
-ppr_mono_ty :: Int -> HsType DocNameI -> Unicode -> Qualification -> HideEmptyContexts -> Html
-ppr_mono_ty ctxt_prec (HsForAllTy _ tvs ty) unicode qual emptyCtxts
- = maybeParen ctxt_prec pREC_FUN $
- ppForAllPart unicode qual tvs <+> ppr_mono_lty pREC_TOP ty unicode qual emptyCtxts
+ppr_mono_ty :: HsType DocNameI -> Unicode -> Qualification -> HideEmptyContexts -> Html
+ppr_mono_ty (HsForAllTy _ tvs ty) unicode qual emptyCtxts
+ = ppForAllPart unicode qual tvs <+> ppr_mono_lty ty unicode qual emptyCtxts
-ppr_mono_ty ctxt_prec (HsQualTy _ ctxt ty) unicode qual emptyCtxts
- = maybeParen ctxt_prec pREC_FUN $
- ppLContext ctxt unicode qual emptyCtxts <+> ppr_mono_lty pREC_TOP ty unicode qual emptyCtxts
+ppr_mono_ty (HsQualTy _ ctxt ty) unicode qual emptyCtxts
+ = ppLContext ctxt unicode qual emptyCtxts <+> ppr_mono_lty ty unicode qual emptyCtxts
-- UnicodeSyntax alternatives
-ppr_mono_ty _ (HsTyVar _ _ (L _ name)) True _ _
+ppr_mono_ty (HsTyVar _ _ (L _ name)) True _ _
| getOccString (getName name) == "(->)" = toHtml "(→)"
-ppr_mono_ty _ (HsBangTy _ b ty) u q _ =
+ppr_mono_ty (HsBangTy _ b ty) u q _ =
ppBang b +++ ppLParendType u q HideEmptyContexts ty
-ppr_mono_ty _ (HsTyVar _ _ (L _ name)) _ q _ =
+ppr_mono_ty (HsTyVar _ _ (L _ name)) _ q _ =
ppDocName q Prefix True name
-ppr_mono_ty _ (HsStarTy _ isUni) u _ _ =
+ppr_mono_ty (HsStarTy _ isUni) u _ _ =
toHtml (if u || isUni then "★" else "*")
-ppr_mono_ty ctxt_prec (HsFunTy _ ty1 ty2) u q e =
- ppr_fun_ty ctxt_prec ty1 ty2 u q e
-ppr_mono_ty _ (HsTupleTy _ con tys) u q _ =
+ppr_mono_ty (HsFunTy _ ty1 ty2) u q e =
+ hsep [ ppr_mono_lty ty1 u q HideEmptyContexts
+ , arrow u <+> ppr_mono_lty ty2 u q e
+ ]
+ppr_mono_ty (HsTupleTy _ con tys) u q _ =
tupleParens con (map (ppLType u q HideEmptyContexts) tys)
-ppr_mono_ty _ (HsSumTy _ tys) u q _ =
+ppr_mono_ty (HsSumTy _ tys) u q _ =
sumParens (map (ppLType u q HideEmptyContexts) tys)
-ppr_mono_ty _ (HsKindSig _ ty kind) u q e =
- parens (ppr_mono_lty pREC_TOP ty u q e <+> dcolon u <+> ppLKind u q kind)
-ppr_mono_ty _ (HsListTy _ ty) u q _ = brackets (ppr_mono_lty pREC_TOP ty u q HideEmptyContexts)
-ppr_mono_ty ctxt_prec (HsIParamTy _ (L _ n) ty) u q _ =
- maybeParen ctxt_prec pREC_CTX $ ppIPName n <+> dcolon u <+> ppr_mono_lty pREC_TOP ty u q HideEmptyContexts
-ppr_mono_ty _ (HsSpliceTy {}) _ _ _ = error "ppr_mono_ty HsSpliceTy"
-ppr_mono_ty _ (HsRecTy {}) _ _ _ = toHtml "{..}"
+ppr_mono_ty (HsKindSig _ ty kind) u q e =
+ parens (ppr_mono_lty ty u q e <+> dcolon u <+> ppLKind u q kind)
+ppr_mono_ty (HsListTy _ ty) u q _ = brackets (ppr_mono_lty ty u q HideEmptyContexts)
+ppr_mono_ty (HsIParamTy _ (L _ n) ty) u q _ =
+ ppIPName n <+> dcolon u <+> ppr_mono_lty ty u q HideEmptyContexts
+ppr_mono_ty (HsSpliceTy {}) _ _ _ = error "ppr_mono_ty HsSpliceTy"
+ppr_mono_ty (HsRecTy {}) _ _ _ = toHtml "{..}"
-- Can now legally occur in ConDeclGADT, the output here is to provide a
-- placeholder in the signature, which is followed by the field
-- declarations.
-ppr_mono_ty _ (XHsType (NHsCoreTy {})) _ _ _ = error "ppr_mono_ty HsCoreTy"
-ppr_mono_ty _ (HsExplicitListTy _ Promoted tys) u q _ = promoQuote $ brackets $ hsep $ punctuate comma $ map (ppLType u q HideEmptyContexts) tys
-ppr_mono_ty _ (HsExplicitListTy _ NotPromoted tys) u q _ = brackets $ hsep $ punctuate comma $ map (ppLType u q HideEmptyContexts) tys
-ppr_mono_ty _ (HsExplicitTupleTy _ tys) u q _ = promoQuote $ parenList $ map (ppLType u q HideEmptyContexts) tys
-
-ppr_mono_ty ctxt_prec (HsAppTy _ fun_ty arg_ty) unicode qual _
- = maybeParen ctxt_prec pREC_CON $
- hsep [ppr_mono_lty pREC_FUN fun_ty unicode qual HideEmptyContexts, ppr_mono_lty pREC_CON arg_ty unicode qual HideEmptyContexts]
-
-ppr_mono_ty ctxt_prec (HsOpTy _ ty1 op ty2) unicode qual _
- = maybeParen ctxt_prec pREC_FUN $
- ppr_mono_lty pREC_OP ty1 unicode qual HideEmptyContexts <+> ppr_op <+> ppr_mono_lty pREC_OP ty2 unicode qual HideEmptyContexts
+ppr_mono_ty (XHsType (NHsCoreTy {})) _ _ _ = error "ppr_mono_ty HsCoreTy"
+ppr_mono_ty (HsExplicitListTy _ Promoted tys) u q _ = promoQuote $ brackets $ hsep $ punctuate comma $ map (ppLType u q HideEmptyContexts) tys
+ppr_mono_ty (HsExplicitListTy _ NotPromoted tys) u q _ = brackets $ hsep $ punctuate comma $ map (ppLType u q HideEmptyContexts) tys
+ppr_mono_ty (HsExplicitTupleTy _ tys) u q _ = promoQuote $ parenList $ map (ppLType u q HideEmptyContexts) tys
+
+ppr_mono_ty (HsAppTy _ fun_ty arg_ty) unicode qual _
+ = hsep [ ppr_mono_lty fun_ty unicode qual HideEmptyContexts
+ , ppr_mono_lty arg_ty unicode qual HideEmptyContexts ]
+
+ppr_mono_ty (HsOpTy _ ty1 op ty2) unicode qual _
+ = ppr_mono_lty ty1 unicode qual HideEmptyContexts <+> ppr_op <+> ppr_mono_lty ty2 unicode qual HideEmptyContexts
where
-- `(:)` is valid in type signature only as constructor to promoted list
-- and needs to be quoted in code so we explicitly quote it here too.
@@ -1236,24 +1215,17 @@ ppr_mono_ty ctxt_prec (HsOpTy _ ty1 op ty2) unicode qual _
| otherwise = ppr_op'
ppr_op' = ppLDocName qual Infix op
-ppr_mono_ty ctxt_prec (HsParTy _ ty) unicode qual emptyCtxts
--- = parens (ppr_mono_lty pREC_TOP ty)
- = ppr_mono_lty ctxt_prec ty unicode qual emptyCtxts
+ppr_mono_ty (HsParTy _ ty) unicode qual emptyCtxts
+ = parens (ppr_mono_lty ty unicode qual emptyCtxts)
+-- = parens (ppr_mono_lty ctxt_prec ty unicode qual emptyCtxts)
-ppr_mono_ty ctxt_prec (HsDocTy _ ty _) unicode qual emptyCtxts
- = ppr_mono_lty ctxt_prec ty unicode qual emptyCtxts
+ppr_mono_ty (HsDocTy _ ty _) unicode qual emptyCtxts
+ = ppr_mono_lty ty unicode qual emptyCtxts
-ppr_mono_ty _ (HsWildCardTy (AnonWildCard _)) _ _ _ = char '_'
-ppr_mono_ty _ (HsTyLit _ n) _ _ _ = ppr_tylit n
+ppr_mono_ty (HsWildCardTy (AnonWildCard _)) _ _ _ = char '_'
+ppr_mono_ty (HsTyLit _ n) _ _ _ = ppr_tylit n
ppr_tylit :: HsTyLit -> Html
ppr_tylit (HsNumTy _ n) = toHtml (show n)
ppr_tylit (HsStrTy _ s) = toHtml (show s)
-ppr_fun_ty :: Int -> LHsType DocNameI -> LHsType DocNameI -> Unicode -> Qualification -> HideEmptyContexts -> Html
-ppr_fun_ty ctxt_prec ty1 ty2 unicode qual emptyCtxts
- = let p1 = ppr_mono_lty pREC_FUN ty1 unicode qual HideEmptyContexts
- p2 = ppr_mono_lty pREC_TOP ty2 unicode qual emptyCtxts
- in
- maybeParen ctxt_prec pREC_FUN $
- hsep [p1, arrow unicode <+> p2]
diff --git a/haddock-api/src/Haddock/Backends/Xhtml/Layout.hs b/haddock-api/src/Haddock/Backends/Xhtml/Layout.hs
index 501caa4b..1c44ffda 100644
--- a/haddock-api/src/Haddock/Backends/Xhtml/Layout.hs
+++ b/haddock-api/src/Haddock/Backends/Xhtml/Layout.hs
@@ -40,7 +40,6 @@ module Haddock.Backends.Xhtml.Layout (
topDeclElem, declElem,
) where
-
import Haddock.Backends.Xhtml.DocMarkup
import Haddock.Backends.Xhtml.Types
import Haddock.Backends.Xhtml.Utils
@@ -48,6 +47,7 @@ import Haddock.Types
import Haddock.Utils (makeAnchorId, nameAnchorId)
import qualified Data.Map as Map
import Text.XHtml hiding ( name, title, quote )
+import Data.Maybe (fromMaybe)
import FastString ( unpackFS )
import GHC
@@ -151,20 +151,22 @@ subTable pkg qual decls = Just $ table << aboves (concatMap subRow decls)
-- | Sub table with source information (optional).
subTableSrc :: Maybe Package -> Qualification -> LinksInfo -> Bool
- -> [(SubDecl,Located DocName)] -> Maybe Html
+ -> [(SubDecl, Maybe Module, Located DocName)] -> Maybe Html
subTableSrc _ _ _ _ [] = Nothing
subTableSrc pkg qual lnks splice decls = Just $ table << aboves (concatMap subRow decls)
where
- subRow ((decl, mdoc, subs),L loc dn) =
+ subRow ((decl, mdoc, subs), mdl, L loc dn) =
(td ! [theclass "src clearfix"] <<
(thespan ! [theclass "inst-left"] << decl)
- <+> linkHtml loc dn
+ <+> linkHtml loc mdl dn
<->
docElement td << fmap (docToHtml Nothing pkg qual) mdoc
)
: map (cell . (td <<)) subs
- linkHtml loc@(RealSrcSpan _) dn = links lnks loc splice dn
- linkHtml _ _ = noHtml
+
+ linkHtml :: SrcSpan -> Maybe Module -> DocName -> Html
+ linkHtml loc@(RealSrcSpan _) mdl dn = links lnks loc splice mdl dn
+ linkHtml _ _ _ = noHtml
subBlock :: [Html] -> Maybe Html
subBlock [] = Nothing
@@ -197,7 +199,7 @@ subEquations pkg qual = divSubDecls "equations" "Equations" . subTable pkg qual
subInstances :: Maybe Package -> Qualification
-> String -- ^ Class name, used for anchor generation
-> LinksInfo -> Bool
- -> [(SubDecl,Located DocName)] -> Html
+ -> [(SubDecl, Maybe Module, Located DocName)] -> Html
subInstances pkg qual nm lnks splice = maybe noHtml wrap . instTable
where
wrap contents = subSection (collapseDetails id_ DetailsOpen (summary +++ contents))
@@ -209,7 +211,7 @@ subInstances pkg qual nm lnks splice = maybe noHtml wrap . instTable
subOrphanInstances :: Maybe Package -> Qualification
-> LinksInfo -> Bool
- -> [(SubDecl,Located DocName)] -> Html
+ -> [(SubDecl, Maybe Module, Located DocName)] -> Html
subOrphanInstances pkg qual lnks splice = maybe noHtml wrap . instTable
where
wrap = ((h1 << "Orphan instances") +++)
@@ -268,13 +270,13 @@ declElem = paragraph ! [theclass "src"]
-- it adds a source and wiki link at the right hand side of the box
topDeclElem :: LinksInfo -> SrcSpan -> Bool -> [DocName] -> Html -> Html
topDeclElem lnks loc splice names html =
- declElem << (html <+> (links lnks loc splice $ head names))
+ declElem << (html <+> (links lnks loc splice Nothing $ head names))
-- FIXME: is it ok to simply take the first name?
-- | Adds a source and wiki link at the right hand side of the box.
-- Name must be documented, otherwise we wouldn't get here.
-links :: LinksInfo -> SrcSpan -> Bool -> DocName -> Html
-links ((_,_,sourceMap,lineMap), (_,_,maybe_wiki_url)) loc splice docName@(Documented n mdl) =
+links :: LinksInfo -> SrcSpan -> Bool -> Maybe Module -> DocName -> Html
+links ((_,_,sourceMap,lineMap), (_,_,maybe_wiki_url)) loc splice mdl' docName@(Documented n mdl) =
srcLink <+> wikiLink <+> (selfLink ! [theclass "selflink"] << "#")
where selfLink = linkedAnchor (nameAnchorId (nameOccName (getName docName)))
@@ -298,12 +300,13 @@ links ((_,_,sourceMap,lineMap), (_,_,maybe_wiki_url)) loc splice docName@(Docume
-- For source links, we want to point to the original module,
-- because only that will have the source.
- -- TODO: do something about type instances. They will point to
- -- the module defining the type family, which is wrong.
- origMod = nameModule n
+ --
+ -- 'mdl'' is a way of "overriding" the module. Without it, instances
+ -- will point to the module defining the class/family, which is wrong.
+ origMod = fromMaybe (nameModule n) mdl'
origPkg = moduleUnitId origMod
fname = case loc of
RealSrcSpan l -> unpackFS (srcSpanFile l)
UnhelpfulSpan _ -> error "links: UnhelpfulSpan"
-links _ _ _ _ = noHtml
+links _ _ _ _ _ = noHtml
diff --git a/haddock-api/src/Haddock/Convert.hs b/haddock-api/src/Haddock/Convert.hs
index bf6fbab0..6eee353b 100644
--- a/haddock-api/src/Haddock/Convert.hs
+++ b/haddock-api/src/Haddock/Convert.hs
@@ -31,7 +31,7 @@ import NameSet ( emptyNameSet )
import RdrName ( mkVarUnqual )
import PatSyn
import SrcLoc ( Located, noLoc, unLoc, GenLocated(..), srcLocSpan )
-import TcType ( tcSplitSigmaTy )
+import TcType
import TyCon
import Type
import TyCoRep
@@ -527,7 +527,7 @@ synifyType _ (FunTy t1 t2) = let
s2 = synifyType WithinType t2
in noLoc $ HsFunTy noExt s1 s2
synifyType s forallty@(ForAllTy _tv _ty) =
- let (tvs, ctx, tau) = tcSplitSigmaTy forallty
+ let (tvs, ctx, tau) = tcSplitSigmaTyPreserveSynonyms forallty
sPhi = HsQualTy { hst_ctxt = synifyCtx ctx
, hst_xqual = noExt
, hst_body = synifyType WithinType tau }
@@ -626,3 +626,47 @@ synifyFamInst fi opaque = do
ts' = synifyTypes ts
annot_ts = zipWith3 annotHsType is_poly_tvs ts ts'
is_poly_tvs = mkIsPolyTvs (tyConVisibleTyVars fam_tc)
+
+{-
+Note [Invariant: Never expand type synonyms]
+
+In haddock, we never want to expand a type synonym that may be presented to the
+user, as we want to keep the link to the abstraction captured in the synonym.
+
+All code in Haddock.Convert must make sure that this invariant holds.
+
+See https://github.com/haskell/haddock/issues/879 for a bug where this
+invariant didn't hold.
+-}
+
+-- | A version of 'TcType.tcSplitSigmaTy' that preserves type synonyms.
+--
+-- See Note [Invariant: Never expand type synonyms]
+tcSplitSigmaTyPreserveSynonyms :: Type -> ([TyVar], ThetaType, Type)
+tcSplitSigmaTyPreserveSynonyms ty =
+ case tcSplitForAllTysPreserveSynonyms ty of
+ (tvs, rho) -> case tcSplitPhiTyPreserveSynonyms rho of
+ (theta, tau) -> (tvs, theta, tau)
+
+-- | See Note [Invariant: Never expand type synonyms]
+tcSplitForAllTysPreserveSynonyms :: Type -> ([TyVar], Type)
+tcSplitForAllTysPreserveSynonyms ty = split ty ty []
+ where
+ split _ (ForAllTy (TvBndr tv _) ty') tvs = split ty' ty' (tv:tvs)
+ split orig_ty _ tvs = (reverse tvs, orig_ty)
+
+-- | See Note [Invariant: Never expand type synonyms]
+tcSplitPhiTyPreserveSynonyms :: Type -> (ThetaType, Type)
+tcSplitPhiTyPreserveSynonyms ty0 = split ty0 []
+ where
+ split ty ts
+ = case tcSplitPredFunTyPreserveSynonyms_maybe ty of
+ Just (pred_, ty') -> split ty' (pred_:ts)
+ Nothing -> (reverse ts, ty)
+
+-- | See Note [Invariant: Never expand type synonyms]
+tcSplitPredFunTyPreserveSynonyms_maybe :: Type -> Maybe (PredType, Type)
+tcSplitPredFunTyPreserveSynonyms_maybe (FunTy arg res)
+ | isPredTy arg = Just (arg, res)
+tcSplitPredFunTyPreserveSynonyms_maybe _
+ = Nothing
diff --git a/haddock-api/src/Haddock/GhcUtils.hs b/haddock-api/src/Haddock/GhcUtils.hs
index b2c34bb4..e7d80969 100644
--- a/haddock-api/src/Haddock/GhcUtils.hs
+++ b/haddock-api/src/Haddock/GhcUtils.hs
@@ -31,6 +31,8 @@ import GHC
import Class
import DynFlags
+import HsTypes (HsType(..))
+
moduleString :: Module -> String
moduleString = moduleNameString . moduleName
@@ -226,6 +228,100 @@ getGADTConTypeG (ConDeclH98 {}) = panic "getGADTConTypeG"
-- Should only be called on ConDeclGADT
getGADTConTypeG (XConDecl {}) = panic "getGADTConTypeG"
+
+-------------------------------------------------------------------------------
+-- * Parenthesization
+-------------------------------------------------------------------------------
+
+-- | Precedence level (inside the 'HsType' AST).
+data Precedence
+ = PREC_TOP -- ^ precedence of 'type' production in GHC's parser
+
+ | PREC_CTX -- ^ Used for single contexts, eg. ctx => type
+ -- (as opposed to (ctx1, ctx2) => type)
+
+ | PREC_FUN -- ^ precedence of 'btype' production in GHC's parser
+ -- (used for LH arg of (->))
+
+ | PREC_OP -- ^ arg of any infix operator
+ -- (we don't keep have fixity info)
+
+ | PREC_CON -- ^ arg of type application: always parenthesize unless atomic
+ deriving (Eq, Ord)
+
+-- | Add in extra 'HsParTy' where needed to ensure that what would be printed
+-- out using 'ppr' has enough parentheses to be re-parsed properly.
+--
+-- We cannot add parens that may be required by fixities because we do not have
+-- any fixity information to work with in the first place :(.
+reparenTypePrec :: (XParTy a ~ NoExt) => Precedence -> HsType a -> HsType a
+reparenTypePrec = go
+ where
+
+ -- Shorter name for 'reparenType'
+ go :: (XParTy a ~ NoExt) => Precedence -> HsType a -> HsType a
+ go _ (HsBangTy x b ty) = HsBangTy x b (reparenLType ty)
+ go _ (HsTupleTy x con tys) = HsTupleTy x con (map reparenLType tys)
+ go _ (HsSumTy x tys) = HsSumTy x (map reparenLType tys)
+ go _ (HsKindSig x ty kind) = HsKindSig x (reparenLType ty) (reparenLType kind)
+ go _ (HsListTy x ty) = HsListTy x (reparenLType ty)
+ go _ (HsRecTy x flds) = HsRecTy x (map (fmap reparenConDeclField) flds)
+ go p (HsDocTy x ty d) = HsDocTy x (goL p ty) d
+ go _ (HsExplicitListTy x p tys) = HsExplicitListTy x p (map reparenLType tys)
+ go _ (HsExplicitTupleTy x tys) = HsExplicitTupleTy x (map reparenLType tys)
+ go p (HsIParamTy x n ty)
+ = paren p PREC_CTX $ HsIParamTy x n (reparenLType ty)
+ go p (HsForAllTy x tvs ty)
+ = paren p PREC_CTX $ HsForAllTy x (map (fmap reparenTyVar) tvs) (reparenLType ty)
+ go p (HsQualTy x ctxt ty)
+ = paren p PREC_FUN $ HsQualTy x (fmap (map reparenLType) ctxt) (reparenLType ty)
+ go p (HsFunTy x ty1 ty2)
+ = paren p PREC_FUN $ HsFunTy x (goL PREC_FUN ty1) (goL PREC_TOP ty2)
+ go p (HsAppTy x fun_ty arg_ty)
+ = paren p PREC_CON $ HsAppTy x (goL PREC_FUN fun_ty) (goL PREC_CON arg_ty)
+ go p (HsOpTy x ty1 op ty2)
+ = paren p PREC_FUN $ HsOpTy x (goL PREC_OP ty1) op (goL PREC_OP ty2)
+ go p (HsParTy _ t) = unLoc $ goL p t -- pretend the paren doesn't exist - it will be added back if needed
+ go _ t@HsTyVar{} = t
+ go _ t@HsStarTy{} = t
+ go _ t@HsSpliceTy{} = t
+ go _ t@HsTyLit{} = t
+ go _ t@HsWildCardTy{} = t
+ go _ t@XHsType{} = t
+
+ -- Located variant of 'go'
+ goL :: (XParTy a ~ NoExt) => Precedence -> LHsType a -> LHsType a
+ goL ctxt_prec = fmap (go ctxt_prec)
+
+ -- Optionally wrap a type in parens
+ paren :: (XParTy a ~ NoExt)
+ => Precedence -- Precedence of context
+ -> Precedence -- Precedence of top-level operator
+ -> HsType a -> HsType a -- Wrap in parens if (ctxt >= op)
+ paren ctxt_prec op_prec | ctxt_prec >= op_prec = HsParTy NoExt . noLoc
+ | otherwise = id
+
+
+-- | Add parenthesis around the types in a 'HsType' (see 'reparenTypePrec')
+reparenType :: (XParTy a ~ NoExt) => HsType a -> HsType a
+reparenType = reparenTypePrec PREC_TOP
+
+-- | Add parenthesis around the types in a 'LHsType' (see 'reparenTypePrec')
+reparenLType :: (XParTy a ~ NoExt) => LHsType a -> LHsType a
+reparenLType = fmap reparenType
+
+-- | Add parenthesis around the types in a 'HsTyVarBndr' (see 'reparenTypePrec')
+reparenTyVar :: (XParTy a ~ NoExt) => HsTyVarBndr a -> HsTyVarBndr a
+reparenTyVar (UserTyVar x n) = UserTyVar x n
+reparenTyVar (KindedTyVar x n kind) = KindedTyVar x n (reparenLType kind)
+reparenTyVar v@XTyVarBndr{} = v
+
+-- | Add parenthesis around the types in a 'ConDeclField' (see 'reparenTypePrec')
+reparenConDeclField :: (XParTy a ~ NoExt) => ConDeclField a -> ConDeclField a
+reparenConDeclField (ConDeclField x n t d) = ConDeclField x n (reparenLType t) d
+reparenConDeclField c@XConDeclField{} = c
+
+
-------------------------------------------------------------------------------
-- * Located
-------------------------------------------------------------------------------
diff --git a/haddock-api/src/Haddock/Interface/Create.hs b/haddock-api/src/Haddock/Interface/Create.hs
index 78242990..c4df2090 100644
--- a/haddock-api/src/Haddock/Interface/Create.hs
+++ b/haddock-api/src/Haddock/Interface/Create.hs
@@ -419,9 +419,12 @@ mkMaps dflags pkgName gre instances decls = do
instanceMap = M.fromList [ (getSrcSpan n, n) | n <- instances ]
names :: SrcSpan -> HsDecl GhcRn -> [Name]
- names l (InstD _ d) = maybeToList (M.lookup loc instanceMap) -- See note [2].
+ names _ (InstD _ d) = maybeToList (M.lookup loc instanceMap) -- See note [2].
where loc = case d of
- TyFamInstD _ _ -> l -- The CoAx's loc is the whole line, but only for TFs
+ -- The CoAx's loc is the whole line, but only for TFs. The
+ -- workaround is to dig into the family instance declaration and
+ -- get the identifier with the right location.
+ TyFamInstD _ (TyFamInstDecl d') -> getLoc (feqn_tycon (hsib_body d'))
_ -> getInstLoc d
names l (DerivD {}) = maybeToList (M.lookup l instanceMap) -- See note [2].
names _ decl = getMainDeclBinder decl
diff --git a/haddock-api/src/Haddock/Types.hs b/haddock-api/src/Haddock/Types.hs
index da422562..ea74043d 100644
--- a/haddock-api/src/Haddock/Types.hs
+++ b/haddock-api/src/Haddock/Types.hs
@@ -28,6 +28,7 @@ module Haddock.Types (
import Control.Exception
import Control.Arrow hiding ((<+>))
import Control.DeepSeq
+import Control.Monad.IO.Class (MonadIO(..))
import Data.Typeable
import Data.Map (Map)
import Data.Data (Data)
@@ -661,6 +662,8 @@ instance Monad ErrMsgGhc where
m >>= k = WriterGhc $ runWriterGhc m >>= \ (a, msgs1) ->
fmap (second (msgs1 ++)) (runWriterGhc (k a))
+instance MonadIO ErrMsgGhc where
+ liftIO m = WriterGhc (fmap (\x -> (x, [])) (liftIO m))
-----------------------------------------------------------------------------
-- * Pass sensitive types
diff --git a/haddock-library/test/Documentation/Haddock/ParserSpec.hs b/haddock-library/test/Documentation/Haddock/ParserSpec.hs
index 86ed3b35..0449c917 100644
--- a/haddock-library/test/Documentation/Haddock/ParserSpec.hs
+++ b/haddock-library/test/Documentation/Haddock/ParserSpec.hs
@@ -86,6 +86,18 @@ spec = do
it "parses identifiers enclosed within backticks" $ do
"`foo`" `shouldParseTo` DocIdentifier "foo"
+ it "parses identifiers preceded by a backtick and followed by a single quote" $ do
+ "`foo'" `shouldParseTo` DocIdentifier "foo"
+
+ it "parses identifiers preceded by a single quote and followed by a backtick" $ do
+ "'foo`" `shouldParseTo` DocIdentifier "foo"
+
+ it "can parse a constructor identifier" $ do
+ "'Foo'" `shouldParseTo` DocIdentifier "Foo"
+
+ it "can parse a qualified identifier" $ do
+ "'Foo.bar'" `shouldParseTo` DocIdentifier "Foo.bar"
+
it "parses a word with an one of the delimiters in it as DocString" $ do
"don't" `shouldParseTo` "don't"
@@ -99,9 +111,43 @@ spec = do
it "doesn't parse empty identifiers" $ do
"``" `shouldParseTo` "``"
- it "can parse infix identifiers" $ do
+ it "can parse an identifier in infix notation enclosed within backticks" $ do
"``infix``" `shouldParseTo` "`" <> DocIdentifier "infix" <> "`"
+ it "can parse identifiers containing a single quote" $ do
+ "'don't'" `shouldParseTo` DocIdentifier "don't"
+
+ it "can parse identifiers ending with a single quote" $ do
+ "'foo''" `shouldParseTo` DocIdentifier "foo'"
+
+ it "can parse an identifier containing a digit" $ do
+ "'f0'" `shouldParseTo` DocIdentifier "f0"
+
+ it "can parse an identifier containing unicode characters" $ do
+ "'λ'" `shouldParseTo` DocIdentifier "λ"
+
+ it "can parse a single quote followed by an identifier" $ do
+ "''foo'" `shouldParseTo` "'" <> DocIdentifier "foo"
+
+ it "can parse an identifier that starts with an underscore" $ do
+ "'_x'" `shouldParseTo` DocIdentifier "_x"
+
+ context "when parsing operators" $ do
+ it "can parse an operator enclosed within single quotes" $ do
+ "'.='" `shouldParseTo` DocIdentifier ".="
+
+ it "can parse a qualified operator" $ do
+ "'F..'" `shouldParseTo` DocIdentifier "F.."
+
+ it "can parse a constructor operator" $ do
+ "':='" `shouldParseTo` DocIdentifier ":="
+
+ it "can parse a qualified constructor operator" $ do
+ "'F.:='" `shouldParseTo` DocIdentifier "F.:="
+
+ it "can parse a unicode operator" $ do
+ "'∧'" `shouldParseTo` DocIdentifier "∧"
+
context "when parsing URLs" $ do
it "parses a URL" $ do
"<http://example.com/>" `shouldParseTo` hyperlink "http://example.com/" Nothing
diff --git a/haddock-test/src/Test/Haddock.hs b/haddock-test/src/Test/Haddock.hs
index f372f773..942c0587 100644
--- a/haddock-test/src/Test/Haddock.hs
+++ b/haddock-test/src/Test/Haddock.hs
@@ -158,7 +158,9 @@ maybeAcceptFile :: Config c -> FilePath -> CheckResult -> IO CheckResult
maybeAcceptFile cfg file result
| cfgAccept cfg && result `elem` [NoRef, Fail] = do
Just out <- readOut cfg file
- writeFile (refFile dcfg file) $ ccfgDump ccfg out
+ let ref = refFile dcfg file
+ createDirectoryIfMissing True (takeDirectory ref)
+ writeFile ref $ ccfgDump ccfg out
pure Accepted
where
dcfg = cfgDirConfig cfg
diff --git a/haddock.cabal b/haddock.cabal
index 29d3d114..af606894 100644
--- a/haddock.cabal
+++ b/haddock.cabal
@@ -78,7 +78,7 @@ executable haddock
xhtml >= 3000.2 && < 3000.3,
Cabal >= 1.10,
ghc-boot,
- ghc == 8.6.*,
+ ghc == 8.5.*,
bytestring,
parsec,
text,
diff --git a/hoogle-test/ref/Bug722/test.txt b/hoogle-test/ref/Bug722/test.txt
new file mode 100644
index 00000000..96f3747b
--- /dev/null
+++ b/hoogle-test/ref/Bug722/test.txt
@@ -0,0 +1,16 @@
+-- Hoogle documentation, generated by Haddock
+-- See Hoogle, http://www.haskell.org/hoogle/
+
+@package test
+@version 0.0.0
+
+module Bug722
+class Foo a
+(!@#) :: Foo a => a -> a -> a
+infixl 4 !@#
+type family &* :: * -> * -> *
+infixr 3 &*
+data a :-& b
+(:^&) :: a -> b -> (:-&) a b
+infixl 6 :-&
+infixl 6 :^&
diff --git a/hoogle-test/ref/Bug806/test.txt b/hoogle-test/ref/Bug806/test.txt
index d9a908b3..67e9fd61 100644
--- a/hoogle-test/ref/Bug806/test.txt
+++ b/hoogle-test/ref/Bug806/test.txt
@@ -21,4 +21,5 @@ class C a where {
-- | <a>AT</a> docs
type family AT a;
+ type AT a = Proxy (Proxy (Proxy (Proxy (Proxy (Proxy (Proxy (Proxy (Proxy (Proxy)))))))));
}
diff --git a/hoogle-test/ref/Bug873/test.txt b/hoogle-test/ref/Bug873/test.txt
new file mode 100644
index 00000000..19100212
--- /dev/null
+++ b/hoogle-test/ref/Bug873/test.txt
@@ -0,0 +1,26 @@
+-- Hoogle documentation, generated by Haddock
+-- See Hoogle, http://www.haskell.org/hoogle/
+
+@package test
+@version 0.0.0
+
+module Bug873
+
+-- | Application operator. This operator is redundant, since ordinary
+-- application <tt>(f x)</tt> means the same as <tt>(f <a>$</a> x)</tt>.
+-- However, <a>$</a> has low, right-associative binding precedence, so it
+-- sometimes allows parentheses to be omitted; for example:
+--
+-- <pre>
+-- f $ g $ h x = f (g (h x))
+-- </pre>
+--
+-- It is also useful in higher-order situations, such as <tt><a>map</a>
+-- (<a>$</a> 0) xs</tt>, or <tt><a>zipWith</a> (<a>$</a>) fs xs</tt>.
+--
+-- Note that <tt>($)</tt> is levity-polymorphic in its result type, so
+-- that foo $ True where foo :: Bool -&gt; Int# is well-typed
+($) :: () => (a -> b) -> a -> b
+infixr 0 $
+($$) :: (a -> b) -> a -> b
+infixr 0 $$
diff --git a/hoogle-test/ref/type-sigs/test.txt b/hoogle-test/ref/type-sigs/test.txt
index ec5f5043..1209279c 100644
--- a/hoogle-test/ref/type-sigs/test.txt
+++ b/hoogle-test/ref/type-sigs/test.txt
@@ -6,11 +6,11 @@
module ReaderT
newtype ReaderT r m a
-ReaderT :: r -> m a -> ReaderT r m a
+ReaderT :: (r -> m a) -> ReaderT r m a
[runReaderT] :: ReaderT r m a -> r -> m a
module ReaderTReexport
newtype ReaderT r m a
-ReaderT :: r -> m a -> ReaderT r m a
+ReaderT :: (r -> m a) -> ReaderT r m a
[runReaderT] :: ReaderT r m a -> r -> m a
runReaderT :: ReaderT r m a -> r -> m a
diff --git a/hoogle-test/src/Bug722/Bug722.hs b/hoogle-test/src/Bug722/Bug722.hs
new file mode 100644
index 00000000..a33d5b24
--- /dev/null
+++ b/hoogle-test/src/Bug722/Bug722.hs
@@ -0,0 +1,13 @@
+{-# LANGUAGE TypeOperators, TypeFamilies #-}
+module Bug722 where
+
+class Foo a where
+ (!@#) :: a -> a -> a
+infixl 4 !@#
+
+type family (&*) :: * -> * -> *
+infixr 3 &*
+
+data a :-& b = a :^& b
+infixl 6 :-&, :^&
+
diff --git a/hoogle-test/src/Bug806/Bug806.hs b/hoogle-test/src/Bug806/Bug806.hs
index 6efcb5cf..45efda77 100644
--- a/hoogle-test/src/Bug806/Bug806.hs
+++ b/hoogle-test/src/Bug806/Bug806.hs
@@ -21,3 +21,4 @@ v = 42
class C a where
-- | 'AT' docs
type AT a
+ type AT a = Proxy (Proxy (Proxy (Proxy (Proxy (Proxy (Proxy (Proxy (Proxy (Proxy)))))))))
diff --git a/hoogle-test/src/Bug873/Bug873.hs b/hoogle-test/src/Bug873/Bug873.hs
new file mode 100644
index 00000000..3a9a5383
--- /dev/null
+++ b/hoogle-test/src/Bug873/Bug873.hs
@@ -0,0 +1,5 @@
+module Bug873 (($), ($$)) where
+infixr 0 $$
+
+($$) :: (a -> b) -> a -> b
+f $$ x = f x
diff --git a/html-test/ref/A.html b/html-test/ref/A.html
index c6965abc..e4802966 100644
--- a/html-test/ref/A.html
+++ b/html-test/ref/A.html
@@ -54,11 +54,15 @@
><li class="src short"
><a href="#"
>other</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
><li class="src short"
><a href="#"
>test2</a
- > :: Bool</li
+ > :: <a href="#" title="Data.Bool"
+ >Bool</a
+ ></li
><li class="src short"
><span class="keyword"
>data</span
@@ -70,7 +74,9 @@
><li class="src short"
><a href="#"
>reExport</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
></ul
></details
></div
@@ -105,7 +111,9 @@
><p class="src"
><a id="v:other" class="def"
>other</a
- > :: Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
></div
@@ -113,7 +121,9 @@
><p class="src"
><a id="v:test2" class="def"
>test2</a
- > :: Bool <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Bool"
+ >Bool</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
@@ -155,7 +165,9 @@
><p class="src"
><a id="v:reExport" class="def"
>reExport</a
- > :: Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
diff --git a/html-test/ref/Bug280.html b/html-test/ref/Bug280.html
index f2d25057..d37fc11f 100644
--- a/html-test/ref/Bug280.html
+++ b/html-test/ref/Bug280.html
@@ -61,7 +61,9 @@
><p class="src"
><a id="v:x" class="def"
>x</a
- > :: [Char] <a href="#" class="selflink"
+ > :: [<a href="#" title="Data.Char"
+ >Char</a
+ >] <a href="#" class="selflink"
>#</a
></p
></div
diff --git a/html-test/ref/Bug3.html b/html-test/ref/Bug3.html
index 2c716278..3c4b905c 100644
--- a/html-test/ref/Bug3.html
+++ b/html-test/ref/Bug3.html
@@ -46,7 +46,9 @@
><li class="src short"
><a href="#"
>foo</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
></ul
></details
></div
@@ -57,7 +59,9 @@
><p class="src"
><a id="v:foo" class="def"
>foo</a
- > :: Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
diff --git a/html-test/ref/Bug310.html b/html-test/ref/Bug310.html
index e664eccd..8fef21a6 100644
--- a/html-test/ref/Bug310.html
+++ b/html-test/ref/Bug310.html
@@ -38,6 +38,28 @@
><p class="caption"
>Bug310</p
></div
+ ><div id="synopsis"
+ ><details id="syn"
+ ><summary
+ >Synopsis</summary
+ ><ul class="details-toggle" data-details-id="syn"
+ ><li class="src short"
+ ><span class="keyword"
+ >type family</span
+ > (a :: <a href="#" title="GHC.TypeNats"
+ >Nat</a
+ >) <a href="#"
+ >+</a
+ > (b :: <a href="#" title="GHC.TypeNats"
+ >Nat</a
+ >) :: <a href="#" title="GHC.TypeNats"
+ >Nat</a
+ > <span class="keyword"
+ >where ...</span
+ ></li
+ ></ul
+ ></details
+ ></div
><div id="interface"
><h1
>Documentation</h1
@@ -45,13 +67,31 @@
><p class="src"
><span class="keyword"
>type family</span
- > (a :: Nat) <a id="t:-43-" class="def"
+ > (a :: <a href="#" title="GHC.TypeNats"
+ >Nat</a
+ >) <a id="t:-43-" class="def"
>+</a
- > (b :: Nat) :: Nat <span class="keyword"
+ > (b :: <a href="#" title="GHC.TypeNats"
+ >Nat</a
+ >) :: <a href="#" title="GHC.TypeNats"
+ >Nat</a
+ > <span class="keyword"
>where ...</span
+ > <span class="fixity"
+ >infixl 6</span
+ ><span class="rightedge"
+ ></span
> <a href="#" class="selflink"
>#</a
></p
+ ><div class="doc"
+ ><p
+ >Addition of type-level naturals.</p
+ ><p
+ ><em
+ >Since: base-4.7.0.0</em
+ ></p
+ ></div
></div
></div
></div
diff --git a/html-test/ref/Bug387.html b/html-test/ref/Bug387.html
index da1b1ee5..ba2f5c91 100644
--- a/html-test/ref/Bug387.html
+++ b/html-test/ref/Bug387.html
@@ -60,11 +60,15 @@
><li class="src short"
><a href="#"
>test1</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
><li class="src short"
><a href="#"
>test2</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
></ul
></details
></div
@@ -79,7 +83,9 @@
><p class="src"
><a id="v:test1" class="def"
>test1</a
- > :: Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
></div
@@ -93,7 +99,9 @@
><p class="src"
><a id="v:test2" class="def"
>test2</a
- > :: Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
></div
diff --git a/html-test/ref/Bug4.html b/html-test/ref/Bug4.html
index 6bf822f7..6afd37fe 100644
--- a/html-test/ref/Bug4.html
+++ b/html-test/ref/Bug4.html
@@ -46,7 +46,9 @@
><li class="src short"
><a href="#"
>foo</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
></ul
></details
></div
@@ -57,7 +59,9 @@
><p class="src"
><a id="v:foo" class="def"
>foo</a
- > :: Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
diff --git a/html-test/ref/Bug546.html b/html-test/ref/Bug546.html
index e2246475..221f7b6c 100644
--- a/html-test/ref/Bug546.html
+++ b/html-test/ref/Bug546.html
@@ -46,11 +46,17 @@
><li class="src short"
><a href="#"
>x</a
- > :: Integer</li
+ > :: <a href="#" title="Prelude"
+ >Integer</a
+ ></li
><li class="src short"
><a href="#"
>compile</a
- > :: String -&gt; String</li
+ > :: <a href="#" title="Data.String"
+ >String</a
+ > -&gt; <a href="#" title="Data.String"
+ >String</a
+ ></li
></ul
></details
></div
@@ -61,7 +67,9 @@
><p class="src"
><a id="v:x" class="def"
>x</a
- > :: Integer <a href="#" class="selflink"
+ > :: <a href="#" title="Prelude"
+ >Integer</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
@@ -81,7 +89,11 @@
><p class="src"
><a id="v:compile" class="def"
>compile</a
- > :: String -&gt; String <a href="#" class="selflink"
+ > :: <a href="#" title="Data.String"
+ >String</a
+ > -&gt; <a href="#" title="Data.String"
+ >String</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
diff --git a/html-test/ref/Bug548.html b/html-test/ref/Bug548.html
index a8061eb2..b690b8ad 100644
--- a/html-test/ref/Bug548.html
+++ b/html-test/ref/Bug548.html
@@ -47,7 +47,13 @@
>newtype</span
> <a id="t:WrappedArrow" class="def"
>WrappedArrow</a
- > (a :: * -&gt; * -&gt; *) b c <a href="#" class="selflink"
+ > (a :: <a href="#" title="Data.Kind"
+ >Type</a
+ > -&gt; <a href="#" title="Data.Kind"
+ >Type</a
+ > -&gt; <a href="#" title="Data.Kind"
+ >Type</a
+ >) b c <a href="#" class="selflink"
>#</a
></p
><div class="subs constructors"
@@ -92,9 +98,15 @@
><span class="inst-left"
><span class="instance details-toggle-control details-toggle" data-details-id="i:id:WrappedArrow:Generic1:1"
></span
- > Generic1 (<a href="#" title="Bug548"
+ > <a href="#" title="GHC.Generics"
+ >Generic1</a
+ > (<a href="#" title="Bug548"
>WrappedArrow</a
- > a b :: * -&gt; *)</span
+ > a b :: <a href="#" title="Data.Kind"
+ >Type</a
+ > -&gt; <a href="#" title="Data.Kind"
+ >Type</a
+ >)</span
></td
><td class="doc empty"
></td
@@ -114,9 +126,15 @@
><p class="src"
><span class="keyword"
>type</span
- > Rep1 (<a href="#" title="Bug548"
- >WrappedArrow</a
- > a b) :: k -&gt; *</p
+ > <a href="#" title="GHC.Generics"
+ >Rep1</a
+ > (<a href="#" title="Bug548"
+ >WrappedArrow</a
+ > a b) :: k -&gt; <a href="#" title="Data.Kind"
+ >Type</a
+ > <a href="#" class="selflink"
+ >#</a
+ ></p
></div
> <div class="subs methods"
><p class="caption"
@@ -126,17 +144,25 @@
>from1</a
> :: <a href="#" title="Bug548"
>WrappedArrow</a
- > a b a0 -&gt; Rep1 (<a href="#" title="Bug548"
+ > a b a0 -&gt; <a href="#" title="GHC.Generics"
+ >Rep1</a
+ > (<a href="#" title="Bug548"
>WrappedArrow</a
- > a b) a0</p
+ > a b) a0 <a href="#" class="selflink"
+ >#</a
+ ></p
><p class="src"
><a href="#"
>to1</a
- > :: Rep1 (<a href="#" title="Bug548"
+ > :: <a href="#" title="GHC.Generics"
+ >Rep1</a
+ > (<a href="#" title="Bug548"
>WrappedArrow</a
> a b) a0 -&gt; <a href="#" title="Bug548"
>WrappedArrow</a
- > a b a0</p
+ > a b a0 <a href="#" class="selflink"
+ >#</a
+ ></p
></div
></details
></td
@@ -146,12 +172,20 @@
><span class="inst-left"
><span class="instance details-toggle-control details-toggle" data-details-id="i:id:WrappedArrow:Functor:2"
></span
- > Arrow a =&gt; Functor (<a href="#" title="Bug548"
+ > <a href="#" title="Control.Arrow"
+ >Arrow</a
+ > a =&gt; <a href="#" title="Data.Functor"
+ >Functor</a
+ > (<a href="#" title="Bug548"
>WrappedArrow</a
> a b)</span
></td
- ><td class="doc empty"
- ></td
+ ><td class="doc"
+ ><p
+ ><em
+ >Since: base-2.1</em
+ ></p
+ ></td
></tr
><tr
><td colspan="2"
@@ -172,7 +206,9 @@
>WrappedArrow</a
> a b a0 -&gt; <a href="#" title="Bug548"
>WrappedArrow</a
- > a b b0</p
+ > a b b0 <a href="#" class="selflink"
+ >#</a
+ ></p
><p class="src"
><a href="#"
>(&lt;$)</a
@@ -180,7 +216,9 @@
>WrappedArrow</a
> a b b0 -&gt; <a href="#" title="Bug548"
>WrappedArrow</a
- > a b a0</p
+ > a b a0 <a href="#" class="selflink"
+ >#</a
+ ></p
></div
></details
></td
@@ -190,12 +228,20 @@
><span class="inst-left"
><span class="instance details-toggle-control details-toggle" data-details-id="i:id:WrappedArrow:Applicative:3"
></span
- > Arrow a =&gt; Applicative (<a href="#" title="Bug548"
+ > <a href="#" title="Control.Arrow"
+ >Arrow</a
+ > a =&gt; <a href="#" title="Control.Applicative"
+ >Applicative</a
+ > (<a href="#" title="Bug548"
>WrappedArrow</a
> a b)</span
></td
- ><td class="doc empty"
- ></td
+ ><td class="doc"
+ ><p
+ ><em
+ >Since: base-2.1</em
+ ></p
+ ></td
></tr
><tr
><td colspan="2"
@@ -214,7 +260,9 @@
>pure</a
> :: a0 -&gt; <a href="#" title="Bug548"
>WrappedArrow</a
- > a b a0</p
+ > a b a0 <a href="#" class="selflink"
+ >#</a
+ ></p
><p class="src"
><a href="#"
>(&lt;*&gt;)</a
@@ -224,7 +272,9 @@
>WrappedArrow</a
> a b a0 -&gt; <a href="#" title="Bug548"
>WrappedArrow</a
- > a b b0</p
+ > a b b0 <a href="#" class="selflink"
+ >#</a
+ ></p
><p class="src"
><a href="#"
>liftA2</a
@@ -234,7 +284,9 @@
>WrappedArrow</a
> a b b0 -&gt; <a href="#" title="Bug548"
>WrappedArrow</a
- > a b c</p
+ > a b c <a href="#" class="selflink"
+ >#</a
+ ></p
><p class="src"
><a href="#"
>(*&gt;)</a
@@ -244,7 +296,9 @@
>WrappedArrow</a
> a b b0 -&gt; <a href="#" title="Bug548"
>WrappedArrow</a
- > a b b0</p
+ > a b b0 <a href="#" class="selflink"
+ >#</a
+ ></p
><p class="src"
><a href="#"
>(&lt;*)</a
@@ -254,7 +308,9 @@
>WrappedArrow</a
> a b b0 -&gt; <a href="#" title="Bug548"
>WrappedArrow</a
- > a b a0</p
+ > a b a0 <a href="#" class="selflink"
+ >#</a
+ ></p
></div
></details
></td
@@ -264,12 +320,22 @@
><span class="inst-left"
><span class="instance details-toggle-control details-toggle" data-details-id="i:id:WrappedArrow:Alternative:4"
></span
- > (ArrowZero a, ArrowPlus a) =&gt; Alternative (<a href="#" title="Bug548"
+ > (<a href="#" title="Control.Arrow"
+ >ArrowZero</a
+ > a, <a href="#" title="Control.Arrow"
+ >ArrowPlus</a
+ > a) =&gt; <a href="#" title="Control.Applicative"
+ >Alternative</a
+ > (<a href="#" title="Bug548"
>WrappedArrow</a
> a b)</span
></td
- ><td class="doc empty"
- ></td
+ ><td class="doc"
+ ><p
+ ><em
+ >Since: base-2.1</em
+ ></p
+ ></td
></tr
><tr
><td colspan="2"
@@ -288,7 +354,9 @@
>empty</a
> :: <a href="#" title="Bug548"
>WrappedArrow</a
- > a b a0</p
+ > a b a0 <a href="#" class="selflink"
+ >#</a
+ ></p
><p class="src"
><a href="#"
>(&lt;|&gt;)</a
@@ -298,7 +366,9 @@
>WrappedArrow</a
> a b a0 -&gt; <a href="#" title="Bug548"
>WrappedArrow</a
- > a b a0</p
+ > a b a0 <a href="#" class="selflink"
+ >#</a
+ ></p
><p class="src"
><a href="#"
>some</a
@@ -306,7 +376,9 @@
>WrappedArrow</a
> a b a0 -&gt; <a href="#" title="Bug548"
>WrappedArrow</a
- > a b [a0]</p
+ > a b [a0] <a href="#" class="selflink"
+ >#</a
+ ></p
><p class="src"
><a href="#"
>many</a
@@ -314,7 +386,9 @@
>WrappedArrow</a
> a b a0 -&gt; <a href="#" title="Bug548"
>WrappedArrow</a
- > a b [a0]</p
+ > a b [a0] <a href="#" class="selflink"
+ >#</a
+ ></p
></div
></details
></td
@@ -324,7 +398,9 @@
><span class="inst-left"
><span class="instance details-toggle-control details-toggle" data-details-id="i:id:WrappedArrow:Generic:5"
></span
- > Generic (<a href="#" title="Bug548"
+ > <a href="#" title="GHC.Generics"
+ >Generic</a
+ > (<a href="#" title="Bug548"
>WrappedArrow</a
> a b c)</span
></td
@@ -346,9 +422,17 @@
><p class="src"
><span class="keyword"
>type</span
- > Rep (<a href="#" title="Bug548"
- >WrappedArrow</a
- > a b c) :: * -&gt; *</p
+ > <a href="#" title="GHC.Generics"
+ >Rep</a
+ > (<a href="#" title="Bug548"
+ >WrappedArrow</a
+ > a b c) :: <a href="#" title="Data.Kind"
+ >Type</a
+ > -&gt; <a href="#" title="Data.Kind"
+ >Type</a
+ > <a href="#" class="selflink"
+ >#</a
+ ></p
></div
> <div class="subs methods"
><p class="caption"
@@ -358,17 +442,25 @@
>from</a
> :: <a href="#" title="Bug548"
>WrappedArrow</a
- > a b c -&gt; Rep (<a href="#" title="Bug548"
+ > a b c -&gt; <a href="#" title="GHC.Generics"
+ >Rep</a
+ > (<a href="#" title="Bug548"
>WrappedArrow</a
- > a b c) x</p
+ > a b c) x <a href="#" class="selflink"
+ >#</a
+ ></p
><p class="src"
><a href="#"
>to</a
- > :: Rep (<a href="#" title="Bug548"
+ > :: <a href="#" title="GHC.Generics"
+ >Rep</a
+ > (<a href="#" title="Bug548"
>WrappedArrow</a
> a b c) x -&gt; <a href="#" title="Bug548"
>WrappedArrow</a
- > a b c</p
+ > a b c <a href="#" class="selflink"
+ >#</a
+ ></p
></div
></details
></td
@@ -380,12 +472,22 @@
></span
> <span class="keyword"
>type</span
- > Rep1 (<a href="#" title="Bug548"
+ > <a href="#" title="GHC.Generics"
+ >Rep1</a
+ > (<a href="#" title="Bug548"
>WrappedArrow</a
- > a b :: * -&gt; *)</span
+ > a b :: <a href="#" title="Data.Kind"
+ >Type</a
+ > -&gt; <a href="#" title="Data.Kind"
+ >Type</a
+ >)</span
+ ></td
+ ><td class="doc"
+ ><p
+ ><em
+ >Since: base-4.7.0.0</em
+ ></p
></td
- ><td class="doc empty"
- ></td
></tr
><tr
><td colspan="2"
@@ -399,9 +501,43 @@
> <div class="src"
><span class="keyword"
>type</span
- > Rep1 (<a href="#" title="Bug548"
+ > <a href="#" title="GHC.Generics"
+ >Rep1</a
+ > (<a href="#" title="Bug548"
>WrappedArrow</a
- > a b :: * -&gt; *) = D1 (MetaData &quot;WrappedArrow&quot; &quot;Control.Applicative&quot; &quot;base&quot; True) (C1 (MetaCons &quot;WrapArrow&quot; PrefixI True) (S1 (MetaSel (Just &quot;unwrapArrow&quot;) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec1 (a b))))</div
+ > a b :: <a href="#" title="Data.Kind"
+ >Type</a
+ > -&gt; <a href="#" title="Data.Kind"
+ >Type</a
+ >) = <a href="#" title="GHC.Generics"
+ >D1</a
+ > (<a href="#" title="GHC.Generics"
+ >MetaData</a
+ > &quot;WrappedArrow&quot; &quot;Control.Applicative&quot; &quot;base&quot; <a href="#" title="Data.Bool"
+ >True</a
+ >) (<a href="#" title="GHC.Generics"
+ >C1</a
+ > (<a href="#" title="GHC.Generics"
+ >MetaCons</a
+ > &quot;WrapArrow&quot; <a href="#" title="GHC.Generics"
+ >PrefixI</a
+ > <a href="#" title="Data.Bool"
+ >True</a
+ >) (<a href="#" title="GHC.Generics"
+ >S1</a
+ > (<a href="#" title="GHC.Generics"
+ >MetaSel</a
+ > (<a href="#" title="GHC.Maybe"
+ >Just</a
+ > &quot;unwrapArrow&quot;) <a href="#" title="GHC.Generics"
+ >NoSourceUnpackedness</a
+ > <a href="#" title="GHC.Generics"
+ >NoSourceStrictness</a
+ > <a href="#" title="GHC.Generics"
+ >DecidedLazy</a
+ >) (<a href="#" title="GHC.Generics"
+ >Rec1</a
+ > (a b))))</div
></details
></td
></tr
@@ -412,12 +548,18 @@
></span
> <span class="keyword"
>type</span
- > Rep (<a href="#" title="Bug548"
+ > <a href="#" title="GHC.Generics"
+ >Rep</a
+ > (<a href="#" title="Bug548"
>WrappedArrow</a
> a b c)</span
></td
- ><td class="doc empty"
- ></td
+ ><td class="doc"
+ ><p
+ ><em
+ >Since: base-4.7.0.0</em
+ ></p
+ ></td
></tr
><tr
><td colspan="2"
@@ -431,9 +573,39 @@
> <div class="src"
><span class="keyword"
>type</span
- > Rep (<a href="#" title="Bug548"
+ > <a href="#" title="GHC.Generics"
+ >Rep</a
+ > (<a href="#" title="Bug548"
>WrappedArrow</a
- > a b c) = D1 (MetaData &quot;WrappedArrow&quot; &quot;Control.Applicative&quot; &quot;base&quot; True) (C1 (MetaCons &quot;WrapArrow&quot; PrefixI True) (S1 (MetaSel (Just &quot;unwrapArrow&quot;) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (a b c))))</div
+ > a b c) = <a href="#" title="GHC.Generics"
+ >D1</a
+ > (<a href="#" title="GHC.Generics"
+ >MetaData</a
+ > &quot;WrappedArrow&quot; &quot;Control.Applicative&quot; &quot;base&quot; <a href="#" title="Data.Bool"
+ >True</a
+ >) (<a href="#" title="GHC.Generics"
+ >C1</a
+ > (<a href="#" title="GHC.Generics"
+ >MetaCons</a
+ > &quot;WrapArrow&quot; <a href="#" title="GHC.Generics"
+ >PrefixI</a
+ > <a href="#" title="Data.Bool"
+ >True</a
+ >) (<a href="#" title="GHC.Generics"
+ >S1</a
+ > (<a href="#" title="GHC.Generics"
+ >MetaSel</a
+ > (<a href="#" title="GHC.Maybe"
+ >Just</a
+ > &quot;unwrapArrow&quot;) <a href="#" title="GHC.Generics"
+ >NoSourceUnpackedness</a
+ > <a href="#" title="GHC.Generics"
+ >NoSourceStrictness</a
+ > <a href="#" title="GHC.Generics"
+ >DecidedLazy</a
+ >) (<a href="#" title="GHC.Generics"
+ >Rec0</a
+ > (a b c))))</div
></details
></td
></tr
diff --git a/html-test/ref/Bug574.html b/html-test/ref/Bug574.html
new file mode 100644
index 00000000..ed0a5e15
--- /dev/null
+++ b/html-test/ref/Bug574.html
@@ -0,0 +1,86 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+><head
+ ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"
+ /><title
+ >Bug574</title
+ ><link href="#" rel="stylesheet" type="text/css" title="Ocean"
+ /><link rel="stylesheet" type="text/css" href="#"
+ /><script src="haddock-bundle.min.js" async="async" type="text/javascript"
+ ></script
+ ><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
+ ></head
+ ><body
+ ><div id="package-header"
+ ><ul class="links" id="page-menu"
+ ><li
+ ><a href="#"
+ >Contents</a
+ ></li
+ ><li
+ ><a href="#"
+ >Index</a
+ ></li
+ ></ul
+ ><p class="caption empty"
+ ></p
+ ></div
+ ><div id="content"
+ ><div id="module-header"
+ ><table class="info"
+ ><tr
+ ><th
+ >Safe Haskell</th
+ ><td
+ >None</td
+ ></tr
+ ></table
+ ><p class="caption"
+ >Bug574</p
+ ></div
+ ><div id="synopsis"
+ ><details id="syn"
+ ><summary
+ >Synopsis</summary
+ ><ul class="details-toggle" data-details-id="syn"
+ ><li class="src short"
+ ><a href="#"
+ >foo</a
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ ></li
+ ></ul
+ ></details
+ ></div
+ ><div id="interface"
+ ><h1
+ >Documentation</h1
+ ><div class="top"
+ ><p class="src"
+ ><a id="v:foo" class="def"
+ >foo</a
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
+ >#</a
+ ></p
+ ><div class="doc"
+ ><p
+ >Somthing with a spliced type</p
+ ></div
+ ></div
+ ></div
+ ></div
+ ><div id="footer"
+ ></div
+ ></body
+ ></html
+> \ No newline at end of file
diff --git a/html-test/ref/Bug6.html b/html-test/ref/Bug6.html
index 27f73d64..15842547 100644
--- a/html-test/ref/Bug6.html
+++ b/html-test/ref/Bug6.html
@@ -58,7 +58,9 @@
>A</a
> = <a href="#"
>A</a
- > Int</li
+ > <a href="#" title="Data.Int"
+ >Int</a
+ ></li
><li class="src short"
><span class="keyword"
>data</span
@@ -66,13 +68,17 @@
>B</a
> = <a href="#"
>B</a
- > Int</li
+ > <a href="#" title="Data.Int"
+ >Int</a
+ ></li
><li class="src short"
><a href="#"
>b</a
> :: <a href="#" title="Bug6"
>B</a
- > -&gt; Int</li
+ > -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ ></li
><li class="src short"
><span class="keyword"
>data</span
@@ -84,11 +90,15 @@
><li
><a href="#"
>c1</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
><li
><a href="#"
>c2</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
></ul
>}</li
><li class="src short"
@@ -98,7 +108,11 @@
>D</a
> = <a href="#"
>D</a
- > Int Int</li
+ > <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" title="Data.Int"
+ >Int</a
+ ></li
><li class="src short"
><span class="keyword"
>newtype</span
@@ -106,7 +120,9 @@
>E</a
> = <a href="#"
>E</a
- > Int</li
+ > <a href="#" title="Data.Int"
+ >Int</a
+ ></li
></ul
></details
></div
@@ -134,7 +150,9 @@
><td class="src"
><a id="v:A" class="def"
>A</a
- > Int</td
+ > <a href="#" title="Data.Int"
+ >Int</a
+ ></td
><td class="doc empty"
></td
></tr
@@ -163,7 +181,9 @@
><td class="src"
><a id="v:B" class="def"
>B</a
- > Int</td
+ > <a href="#" title="Data.Int"
+ >Int</a
+ ></td
><td class="doc empty"
></td
></tr
@@ -176,7 +196,9 @@
>b</a
> :: <a href="#" title="Bug6"
>B</a
- > -&gt; Int <a href="#" class="selflink"
+ > -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
></div
@@ -215,7 +237,9 @@
><dfn class="src"
><a id="v:c1" class="def"
>c1</a
- > :: Int</dfn
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></dfn
><div class="doc empty"
></div
></li
@@ -223,7 +247,9 @@
><dfn class="src"
><a id="v:c2" class="def"
>c2</a
- > :: Int</dfn
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></dfn
><div class="doc empty"
></div
></li
@@ -256,7 +282,11 @@
><td class="src"
><a id="v:D" class="def"
>D</a
- > Int Int</td
+ > <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" title="Data.Int"
+ >Int</a
+ ></td
><td class="doc empty"
></td
></tr
@@ -284,7 +314,9 @@
><td class="src"
><a id="v:E" class="def"
>E</a
- > Int</td
+ > <a href="#" title="Data.Int"
+ >Int</a
+ ></td
><td class="doc empty"
></td
></tr
diff --git a/html-test/ref/Bug613.html b/html-test/ref/Bug613.html
index e8089fc8..71e30832 100644
--- a/html-test/ref/Bug613.html
+++ b/html-test/ref/Bug613.html
@@ -104,7 +104,9 @@
></span
> <a href="#" title="Bug613"
>Functor</a
- > (Either a)</span
+ > (<a href="#" title="Data.Either"
+ >Either</a
+ > a)</span
> <a href="#" class="selflink"
>#</a
></td
@@ -126,7 +128,11 @@
><p class="src"
><a href="#"
>fmap</a
- > :: (a0 -&gt; b) -&gt; Either a a0 -&gt; Either a b <a href="#" class="selflink"
+ > :: (a0 -&gt; b) -&gt; <a href="#" title="Data.Either"
+ >Either</a
+ > a a0 -&gt; <a href="#" title="Data.Either"
+ >Either</a
+ > a b <a href="#" class="selflink"
>#</a
></p
></div
diff --git a/html-test/ref/Bug8.html b/html-test/ref/Bug8.html
index 7aa562f2..9de7cca6 100644
--- a/html-test/ref/Bug8.html
+++ b/html-test/ref/Bug8.html
@@ -99,7 +99,9 @@
><p class="src"
><a id="v:-45--45--45--62-" class="def"
>(---&gt;)</a
- > :: Foldable t0 =&gt; t0 t -&gt; <a href="#" title="Bug8"
+ > :: <a href="#" title="Data.Foldable"
+ >Foldable</a
+ > t0 =&gt; t0 t -&gt; <a href="#" title="Bug8"
>Typ</a
> -&gt; <a href="#" title="Bug8"
>Typ</a
diff --git a/html-test/ref/BugDeprecated.html b/html-test/ref/BugDeprecated.html
index 393a78ab..4efe3da2 100644
--- a/html-test/ref/BugDeprecated.html
+++ b/html-test/ref/BugDeprecated.html
@@ -46,27 +46,39 @@
><li class="src short"
><a href="#"
>foo</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
><li class="src short"
><a href="#"
>bar</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
><li class="src short"
><a href="#"
>baz</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
><li class="src short"
><a href="#"
>one</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
><li class="src short"
><a href="#"
>two</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
><li class="src short"
><a href="#"
>three</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
></ul
></details
></div
@@ -77,7 +89,9 @@
><p class="src"
><a id="v:foo" class="def"
>foo</a
- > :: Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
@@ -91,7 +105,9 @@
><p class="src"
><a id="v:bar" class="def"
>bar</a
- > :: Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
@@ -105,7 +121,9 @@
><p class="src"
><a id="v:baz" class="def"
>baz</a
- > :: Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
@@ -119,7 +137,9 @@
><p class="src"
><a id="v:one" class="def"
>one</a
- > :: Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
@@ -135,7 +155,9 @@
><p class="src"
><a id="v:two" class="def"
>two</a
- > :: Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
@@ -149,7 +171,9 @@
><p class="src"
><a id="v:three" class="def"
>three</a
- > :: Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
diff --git a/html-test/ref/BugExportHeadings.html b/html-test/ref/BugExportHeadings.html
index 17378531..78af3351 100644
--- a/html-test/ref/BugExportHeadings.html
+++ b/html-test/ref/BugExportHeadings.html
@@ -76,27 +76,39 @@
><li class="src short"
><a href="#"
>foo</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
><li class="src short"
><a href="#"
>bar</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
><li class="src short"
><a href="#"
>baz</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
><li class="src short"
><a href="#"
>one</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
><li class="src short"
><a href="#"
>two</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
><li class="src short"
><a href="#"
>three</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
></ul
></details
></div
@@ -109,7 +121,9 @@
><p class="src"
><a id="v:foo" class="def"
>foo</a
- > :: Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
></div
@@ -121,7 +135,9 @@
><p class="src"
><a id="v:bar" class="def"
>bar</a
- > :: Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
></div
@@ -133,7 +149,9 @@
><p class="src"
><a id="v:baz" class="def"
>baz</a
- > :: Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
></div
@@ -145,7 +163,9 @@
><p class="src"
><a id="v:one" class="def"
>one</a
- > :: Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
@@ -163,7 +183,9 @@
><p class="src"
><a id="v:two" class="def"
>two</a
- > :: Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
@@ -181,7 +203,9 @@
><p class="src"
><a id="v:three" class="def"
>three</a
- > :: Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
diff --git a/html-test/ref/Bugs.html b/html-test/ref/Bugs.html
index 348ae6bc..abe20dc2 100644
--- a/html-test/ref/Bugs.html
+++ b/html-test/ref/Bugs.html
@@ -58,7 +58,9 @@
><td class="src"
><a id="v:A" class="def"
>A</a
- > a (a -&gt; Int)</td
+ > a (a -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ >)</td
><td class="doc empty"
></td
></tr
diff --git a/html-test/ref/BundledPatterns.html b/html-test/ref/BundledPatterns.html
index 7a602ae1..e9c77612 100644
--- a/html-test/ref/BundledPatterns.html
+++ b/html-test/ref/BundledPatterns.html
@@ -48,7 +48,9 @@
>data</span
> <a href="#"
>Vec</a
- > :: Nat -&gt; * -&gt; * <span class="keyword"
+ > :: <a href="#" title="GHC.TypeNats"
+ >Nat</a
+ > -&gt; * -&gt; * <span class="keyword"
>where</span
><ul class="subs"
><li
@@ -76,7 +78,9 @@
>data</span
> <a href="#"
>RTree</a
- > :: Nat -&gt; * -&gt; * <span class="keyword"
+ > :: <a href="#" title="GHC.TypeNats"
+ >Nat</a
+ > -&gt; * -&gt; * <span class="keyword"
>where</span
><ul class="subs"
><li
@@ -115,7 +119,9 @@
>data</span
> <a id="t:Vec" class="def"
>Vec</a
- > :: Nat -&gt; * -&gt; * <span class="keyword"
+ > :: <a href="#" title="GHC.TypeNats"
+ >Nat</a
+ > -&gt; * -&gt; * <span class="keyword"
>where</span
> <a href="#" class="selflink"
>#</a
@@ -136,7 +142,9 @@
> subscript starting from 0 and
ending at <code
><code
- >length</code
+ ><a href="#" title="Data.Foldable"
+ >length</a
+ ></code
> - 1</code
>.</li
></ul
@@ -273,7 +281,9 @@
>data</span
> <a id="t:RTree" class="def"
>RTree</a
- > :: Nat -&gt; * -&gt; * <span class="keyword"
+ > :: <a href="#" title="GHC.TypeNats"
+ >Nat</a
+ > -&gt; * -&gt; * <span class="keyword"
>where</span
> <a href="#" class="selflink"
>#</a
diff --git a/html-test/ref/BundledPatterns2.html b/html-test/ref/BundledPatterns2.html
index 6a60c748..2f456728 100644
--- a/html-test/ref/BundledPatterns2.html
+++ b/html-test/ref/BundledPatterns2.html
@@ -48,7 +48,9 @@
>data</span
> <a href="#"
>Vec</a
- > :: Nat -&gt; * -&gt; * <span class="keyword"
+ > :: <a href="#" title="GHC.TypeNats"
+ >Nat</a
+ > -&gt; * -&gt; * <span class="keyword"
>where</span
><ul class="subs"
><li
@@ -78,7 +80,9 @@
>data</span
> <a href="#"
>RTree</a
- > :: Nat -&gt; * -&gt; * <span class="keyword"
+ > :: <a href="#" title="GHC.TypeNats"
+ >Nat</a
+ > -&gt; * -&gt; * <span class="keyword"
>where</span
><ul class="subs"
><li
@@ -117,7 +121,9 @@
>data</span
> <a id="t:Vec" class="def"
>Vec</a
- > :: Nat -&gt; * -&gt; * <span class="keyword"
+ > :: <a href="#" title="GHC.TypeNats"
+ >Nat</a
+ > -&gt; * -&gt; * <span class="keyword"
>where</span
> <a href="#" class="selflink"
>#</a
@@ -138,7 +144,9 @@
> subscript starting from 0 and
ending at <code
><code
- >length</code
+ ><a href="#" title="Data.Foldable"
+ >length</a
+ ></code
> - 1</code
>.</li
></ul
@@ -271,7 +279,9 @@
>data</span
> <a id="t:RTree" class="def"
>RTree</a
- > :: Nat -&gt; * -&gt; * <span class="keyword"
+ > :: <a href="#" title="GHC.TypeNats"
+ >Nat</a
+ > -&gt; * -&gt; * <span class="keyword"
>where</span
> <a href="#" class="selflink"
>#</a
diff --git a/html-test/ref/ConstructorArgs.html b/html-test/ref/ConstructorArgs.html
new file mode 100644
index 00000000..9aad9c86
--- /dev/null
+++ b/html-test/ref/ConstructorArgs.html
@@ -0,0 +1,720 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+><head
+ ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"
+ /><title
+ >ConstructorArgs</title
+ ><link href="#" rel="stylesheet" type="text/css" title="Ocean"
+ /><link rel="stylesheet" type="text/css" href="#"
+ /><script src="haddock-bundle.min.js" async="async" type="text/javascript"
+ ></script
+ ><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
+ ></head
+ ><body
+ ><div id="package-header"
+ ><ul class="links" id="page-menu"
+ ><li
+ ><a href="#"
+ >Contents</a
+ ></li
+ ><li
+ ><a href="#"
+ >Index</a
+ ></li
+ ></ul
+ ><p class="caption empty"
+ ></p
+ ></div
+ ><div id="content"
+ ><div id="module-header"
+ ><table class="info"
+ ><tr
+ ><th
+ >Safe Haskell</th
+ ><td
+ >Safe</td
+ ></tr
+ ></table
+ ><p class="caption"
+ >ConstructorArgs</p
+ ></div
+ ><div id="synopsis"
+ ><details id="syn"
+ ><summary
+ >Synopsis</summary
+ ><ul class="details-toggle" data-details-id="syn"
+ ><li class="src short"
+ ><span class="keyword"
+ >data</span
+ > <a href="#"
+ >Foo</a
+ ><ul class="subs"
+ ><li
+ >= <a href="#"
+ >Rec</a
+ > { <ul class="subs"
+ ><li
+ ><a href="#"
+ >x</a
+ > :: <a href="#" title="Data.String"
+ >String</a
+ ></li
+ ><li
+ ><a href="#"
+ >y</a
+ > :: <a href="#" title="Data.String"
+ >String</a
+ ></li
+ ></ul
+ > }</li
+ ><li
+ >| <a href="#"
+ >Baz</a
+ > <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" title="Data.String"
+ >String</a
+ ></li
+ ><li
+ >| <a href="#"
+ >Boa</a
+ > !<a href="#" title="Data.Int"
+ >Int</a
+ > !<a href="#" title="Data.String"
+ >String</a
+ ></li
+ ><li
+ >| <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#"
+ >:|</a
+ > <a href="#" title="Data.String"
+ >String</a
+ ></li
+ ><li
+ >| <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#"
+ >:*</a
+ > <a href="#" title="Data.String"
+ >String</a
+ ></li
+ ></ul
+ ></li
+ ><li class="src short"
+ ><span class="keyword"
+ >data</span
+ > <a href="#"
+ >Boo</a
+ > <span class="keyword"
+ >where</span
+ ><ul class="subs"
+ ><li
+ ><a href="#"
+ >Foo</a
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; <a href="#" title="Data.String"
+ >String</a
+ > -&gt; <a href="#" title="ConstructorArgs"
+ >Boo</a
+ ></li
+ ><li
+ ><a href="#"
+ >Foa</a
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; <a href="#" title="ConstructorArgs"
+ >Boo</a
+ ></li
+ ><li
+ ><span class="keyword"
+ >pattern</span
+ > <a href="#"
+ >Fo</a
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; <a href="#" title="Data.String"
+ >String</a
+ > -&gt; <a href="#" title="ConstructorArgs"
+ >Boo</a
+ ></li
+ ><li
+ ><span class="keyword"
+ >pattern</span
+ > <a href="#"
+ >Fo'</a
+ > :: <a href="#" title="ConstructorArgs"
+ >Boo</a
+ ></li
+ ></ul
+ ></li
+ ><li class="src short"
+ ><span class="keyword"
+ >pattern</span
+ > <a href="#"
+ >Bo</a
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; <a href="#" title="Data.String"
+ >String</a
+ > -&gt; <a href="#" title="ConstructorArgs"
+ >Boo</a
+ ></li
+ ><li class="src short"
+ ><span class="keyword"
+ >pattern</span
+ > <a href="#"
+ >Bo'</a
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; <a href="#" title="Data.String"
+ >String</a
+ > -&gt; <a href="#" title="ConstructorArgs"
+ >Boo</a
+ ></li
+ ></ul
+ ></details
+ ></div
+ ><div id="interface"
+ ><h1
+ >Documentation</h1
+ ><div class="top"
+ ><p class="src"
+ ><span class="keyword"
+ >data</span
+ > <a id="t:Foo" class="def"
+ >Foo</a
+ > <span class="fixity"
+ >infixr 1</span
+ ><span class="rightedge"
+ ></span
+ > <a href="#" class="selflink"
+ >#</a
+ ></p
+ ><div class="subs constructors"
+ ><p class="caption"
+ >Constructors</p
+ ><table
+ ><tr
+ ><td class="src"
+ ><a id="v:Rec" class="def"
+ >Rec</a
+ ></td
+ ><td class="doc"
+ ><p
+ >doc on a record</p
+ ></td
+ ></tr
+ ><tr
+ ><td colspan="2"
+ ><div class="subs fields"
+ ><p class="caption"
+ >Fields</p
+ ><ul
+ ><li
+ ><dfn class="src"
+ ><a id="v:x" class="def"
+ >x</a
+ > :: <a href="#" title="Data.String"
+ >String</a
+ ></dfn
+ ><div class="doc"
+ ><p
+ >doc on the <code
+ ><a href="#" title="Data.String"
+ >String</a
+ ></code
+ > field of <code
+ ><a href="#" title="ConstructorArgs"
+ >Rec</a
+ ></code
+ ></p
+ ></div
+ ></li
+ ><li
+ ><dfn class="src"
+ ><a id="v:y" class="def"
+ >y</a
+ > :: <a href="#" title="Data.String"
+ >String</a
+ ></dfn
+ ><div class="doc"
+ ><p
+ >doc on the <code
+ ><a href="#" title="Data.String"
+ >String</a
+ ></code
+ > field of <code
+ ><a href="#" title="ConstructorArgs"
+ >Rec</a
+ ></code
+ ></p
+ ></div
+ ></li
+ ></ul
+ ></div
+ ></td
+ ></tr
+ ><tr
+ ><td class="src"
+ ><a id="v:Baz" class="def"
+ >Baz</a
+ > <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" title="Data.String"
+ >String</a
+ ></td
+ ><td class="doc"
+ ><p
+ >old prefix doc style</p
+ ></td
+ ></tr
+ ><tr
+ ><td class="src"
+ ><a id="v:Boa" class="def"
+ >Boa</a
+ > <span class="fixity"
+ >infixr 2</span
+ ><span class="rightedge"
+ ></span
+ ></td
+ ><td class="doc"
+ ><p
+ >doc on the <code
+ ><a href="#" title="ConstructorArgs"
+ >Boa</a
+ ></code
+ > constrictor</p
+ ></td
+ ></tr
+ ><tr
+ ><td colspan="2"
+ ><div class="subs fields"
+ ><p class="caption"
+ >Fields</p
+ ><ul
+ ><li
+ ><dfn class="src"
+ >!<a href="#" title="Data.Int"
+ >Int</a
+ ></dfn
+ ><div class="doc"
+ ><p
+ >doc on the <code
+ ><a href="#" title="Data.Int"
+ >Int</a
+ ></code
+ > field of <code
+ ><a href="#" title="ConstructorArgs"
+ >Boa</a
+ ></code
+ ></p
+ ></div
+ ></li
+ ><li
+ ><dfn class="src"
+ >!<a href="#" title="Data.String"
+ >String</a
+ ></dfn
+ ><div class="doc"
+ ><p
+ >doc on the <code
+ ><a href="#" title="Data.String"
+ >String</a
+ ></code
+ > field of <code
+ ><a href="#" title="ConstructorArgs"
+ >Boa</a
+ ></code
+ ></p
+ ></div
+ ></li
+ ></ul
+ ></div
+ ></td
+ ></tr
+ ><tr
+ ><td class="src"
+ ><a href="#" title="Data.Int"
+ >Int</a
+ > <a id="v::-124-" class="def"
+ >:|</a
+ > <a href="#" title="Data.String"
+ >String</a
+ ></td
+ ><td class="doc"
+ ><p
+ >old infix doc style</p
+ ></td
+ ></tr
+ ><tr
+ ><td class="src"
+ ><a id="v::-42-" class="def"
+ >(:*)</a
+ > <span class="fixity"
+ >infixr 3</span
+ ><span class="rightedge"
+ ></span
+ ></td
+ ><td class="doc"
+ ><p
+ >doc on the <code
+ ><a href="#" title="ConstructorArgs"
+ >:*</a
+ ></code
+ > constructor</p
+ ></td
+ ></tr
+ ><tr
+ ><td colspan="2"
+ ><div class="subs fields"
+ ><p class="caption"
+ >Fields</p
+ ><ul
+ ><li
+ ><dfn class="src"
+ ><a href="#" title="Data.Int"
+ >Int</a
+ ></dfn
+ ><div class="doc"
+ ><p
+ >doc on the <code
+ ><a href="#" title="Data.Int"
+ >Int</a
+ ></code
+ > field of the <code
+ ><a href="#" title="ConstructorArgs"
+ >:*</a
+ ></code
+ > constructor</p
+ ></div
+ ></li
+ ><li
+ ><dfn class="src"
+ ><a href="#" title="Data.String"
+ >String</a
+ ></dfn
+ ><div class="doc"
+ ><p
+ >doc on the <code
+ ><a href="#" title="Data.String"
+ >String</a
+ ></code
+ > field of the <code
+ ><a href="#" title="ConstructorArgs"
+ >:*</a
+ ></code
+ > constructor</p
+ ></div
+ ></li
+ ></ul
+ ></div
+ ></td
+ ></tr
+ ></table
+ ></div
+ ></div
+ ><div class="top"
+ ><p class="src"
+ ><span class="keyword"
+ >data</span
+ > <a id="t:Boo" class="def"
+ >Boo</a
+ > <span class="keyword"
+ >where</span
+ > <span class="fixity"
+ >infixr 4</span
+ ><span class="rightedge"
+ ></span
+ > <a href="#" class="selflink"
+ >#</a
+ ></p
+ ><div class="subs constructors"
+ ><p class="caption"
+ >Constructors</p
+ ><table
+ ><tr
+ ><td class="src"
+ ><a id="v:Foo" class="def"
+ >Foo</a
+ > <span class="fixity"
+ >infixr 1</span
+ ><span class="rightedge"
+ ></span
+ ></td
+ ><td class="doc"
+ ><p
+ >Info about a <code
+ ><a href="#" title="ConstructorArgs"
+ >Foo</a
+ ></code
+ ></p
+ ></td
+ ></tr
+ ><tr
+ ><td colspan="2"
+ ><div class="subs fields"
+ ><p class="caption"
+ >Fields</p
+ ><ul
+ ><li
+ ><dfn class="src"
+ >:: <a href="#" title="Data.Int"
+ >Int</a
+ ></dfn
+ ><div class="doc"
+ ><p
+ ><code
+ ><a href="#" title="Data.Int"
+ >Int</a
+ ></code
+ > field of <code
+ ><a href="#" title="ConstructorArgs"
+ >Foo</a
+ ></code
+ ></p
+ ></div
+ ></li
+ ><li
+ ><dfn class="src"
+ >-&gt; <a href="#" title="Data.String"
+ >String</a
+ ></dfn
+ ><div class="doc"
+ ><p
+ ><code
+ ><a href="#" title="Data.String"
+ >String</a
+ ></code
+ > field of <code
+ ><a href="#" title="ConstructorArgs"
+ >Foo</a
+ ></code
+ ></p
+ ></div
+ ></li
+ ><li
+ ><dfn class="src"
+ >-&gt; <a href="#" title="ConstructorArgs"
+ >Boo</a
+ ></dfn
+ ><div class="doc"
+ ><p
+ >Make a <code
+ ><a href="#" title="ConstructorArgs"
+ >Boo</a
+ ></code
+ ></p
+ ></div
+ ></li
+ ></ul
+ ></div
+ ></td
+ ></tr
+ ><tr
+ ><td class="src"
+ ><a id="v:Foa" class="def"
+ >Foa</a
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; <a href="#" title="ConstructorArgs"
+ >Boo</a
+ ></td
+ ><td class="doc"
+ ><p
+ >no argument docs GADT</p
+ ></td
+ ></tr
+ ></table
+ ></div
+ ><div class="subs bundled-patterns"
+ ><p class="caption"
+ >Bundled Patterns</p
+ ><table
+ ><tr
+ ><td class="src"
+ ><span class="keyword"
+ >pattern</span
+ > <a id="v:Fo" class="def"
+ >Fo</a
+ > <span class="fixity"
+ >infixr 5</span
+ ><span class="rightedge"
+ ></span
+ ></td
+ ><td class="doc"
+ ><p
+ >Info about bundled <code
+ ><a href="#" title="ConstructorArgs"
+ >Fo</a
+ ></code
+ ></p
+ ></td
+ ></tr
+ ><tr
+ ><td colspan="2"
+ ><div class="subs fields"
+ ><p class="caption"
+ >Fields</p
+ ><ul
+ ><li
+ ><dfn class="src"
+ >:: <a href="#" title="Data.Int"
+ >Int</a
+ ></dfn
+ ><div class="doc"
+ ><p
+ >an <code
+ ><a href="#" title="Data.Int"
+ >Int</a
+ ></code
+ ></p
+ ></div
+ ></li
+ ><li
+ ><dfn class="src"
+ >-&gt; <a href="#" title="Data.String"
+ >String</a
+ ></dfn
+ ><div class="doc"
+ ><p
+ >a <code
+ ><a href="#" title="Data.String"
+ >String</a
+ ></code
+ ></p
+ ></div
+ ></li
+ ><li
+ ><dfn class="src"
+ >-&gt; <a href="#" title="ConstructorArgs"
+ >Boo</a
+ ></dfn
+ ><div class="doc"
+ ><p
+ >a <code
+ ><a href="#" title="ConstructorArgs"
+ >Boo</a
+ ></code
+ ></p
+ ></div
+ ></li
+ ></ul
+ ></div
+ ></td
+ ></tr
+ ><tr
+ ><td class="src"
+ ><span class="keyword"
+ >pattern</span
+ > <a id="v:Fo-39-" class="def"
+ >Fo'</a
+ > :: <a href="#" title="ConstructorArgs"
+ >Boo</a
+ ></td
+ ><td class="doc"
+ ><p
+ >Bundled and no argument docs</p
+ ></td
+ ></tr
+ ></table
+ ></div
+ ></div
+ ><div class="top"
+ ><p class="src"
+ ><span class="keyword"
+ >pattern</span
+ > <a id="v:Bo" class="def"
+ >Bo</a
+ > <span class="fixity"
+ >infixr 6</span
+ ><span class="rightedge"
+ ></span
+ > <a href="#" class="selflink"
+ >#</a
+ ></p
+ ><div class="subs arguments"
+ ><p class="caption"
+ >Arguments</p
+ ><table
+ ><tr
+ ><td class="src"
+ >:: <a href="#" title="Data.Int"
+ >Int</a
+ ></td
+ ><td class="doc"
+ ><p
+ >an <code
+ ><a href="#" title="Data.Int"
+ >Int</a
+ ></code
+ ></p
+ ></td
+ ></tr
+ ><tr
+ ><td class="src"
+ >-&gt; <a href="#" title="Data.String"
+ >String</a
+ ></td
+ ><td class="doc"
+ ><p
+ >a <code
+ ><a href="#" title="Data.String"
+ >String</a
+ ></code
+ ></p
+ ></td
+ ></tr
+ ><tr
+ ><td class="src"
+ >-&gt; <a href="#" title="ConstructorArgs"
+ >Boo</a
+ ></td
+ ><td class="doc"
+ ><p
+ >a <code
+ ><a href="#" title="ConstructorArgs"
+ >Boo</a
+ ></code
+ > pattern</p
+ ></td
+ ></tr
+ ></table
+ ></div
+ ><div class="doc"
+ ><p
+ >Info about not-bundled <code
+ ><a href="#" title="ConstructorArgs"
+ >Bo</a
+ ></code
+ ></p
+ ></div
+ ></div
+ ><div class="top"
+ ><p class="src"
+ ><span class="keyword"
+ >pattern</span
+ > <a id="v:Bo-39-" class="def"
+ >Bo'</a
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; <a href="#" title="Data.String"
+ >String</a
+ > -&gt; <a href="#" title="ConstructorArgs"
+ >Boo</a
+ > <a href="#" class="selflink"
+ >#</a
+ ></p
+ ><div class="doc"
+ ><p
+ >Not bunded and no argument docs</p
+ ></div
+ ></div
+ ></div
+ ></div
+ ><div id="footer"
+ ></div
+ ></body
+ ></html
+> \ No newline at end of file
diff --git a/html-test/ref/ConstructorPatternExport.html b/html-test/ref/ConstructorPatternExport.html
index 548cd729..6f091de7 100644
--- a/html-test/ref/ConstructorPatternExport.html
+++ b/html-test/ref/ConstructorPatternExport.html
@@ -47,7 +47,9 @@
>pattern</span
> <a id="v:FooCons" class="def"
>FooCons</a
- > :: String -&gt; a -&gt; Foo a <a href="#" class="selflink"
+ > :: <a href="#" title="Data.String"
+ >String</a
+ > -&gt; a -&gt; Foo a <a href="#" class="selflink"
>#</a
></p
></div
@@ -57,7 +59,11 @@
>pattern</span
> <a id="v:MyRecCons" class="def"
>MyRecCons</a
- > :: Bool -&gt; Int -&gt; MyRec <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Bool"
+ >Bool</a
+ > -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; MyRec <a href="#" class="selflink"
>#</a
></p
></div
@@ -67,7 +73,9 @@
>pattern</span
> <a id="v::-43-" class="def"
>(:+)</a
- > :: String -&gt; a -&gt; MyInfix a <a href="#" class="selflink"
+ > :: <a href="#" title="Data.String"
+ >String</a
+ > -&gt; a -&gt; MyInfix a <a href="#" class="selflink"
>#</a
></p
></div
@@ -77,7 +85,9 @@
>pattern</span
> <a id="v:BlubCons" class="def"
>BlubCons</a
- > :: () =&gt; Show b =&gt; b -&gt; Blub <a href="#" class="selflink"
+ > :: () =&gt; <a href="#" title="Text.Show"
+ >Show</a
+ > b =&gt; b -&gt; Blub <a href="#" class="selflink"
>#</a
></p
></div
@@ -87,7 +97,13 @@
>pattern</span
> <a id="v:MyGADTCons" class="def"
>MyGADTCons</a
- > :: a -&gt; Int -&gt; MyGADT (Maybe String) <a href="#" class="selflink"
+ > :: a -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; MyGADT (<a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > <a href="#" title="Data.String"
+ >String</a
+ >) <a href="#" class="selflink"
>#</a
></p
></div
diff --git a/html-test/ref/DeprecatedFunction.html b/html-test/ref/DeprecatedFunction.html
index 5682128f..b43526ba 100644
--- a/html-test/ref/DeprecatedFunction.html
+++ b/html-test/ref/DeprecatedFunction.html
@@ -46,11 +46,15 @@
><li class="src short"
><a href="#"
>foo</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
><li class="src short"
><a href="#"
>bar</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
></ul
></details
></div
@@ -61,7 +65,9 @@
><p class="src"
><a id="v:foo" class="def"
>foo</a
- > :: Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
@@ -81,7 +87,9 @@
><p class="src"
><a id="v:bar" class="def"
>bar</a
- > :: Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
diff --git a/html-test/ref/DeprecatedFunction2.html b/html-test/ref/DeprecatedFunction2.html
index d4e19e7a..db0098b2 100644
--- a/html-test/ref/DeprecatedFunction2.html
+++ b/html-test/ref/DeprecatedFunction2.html
@@ -46,7 +46,9 @@
><li class="src short"
><a href="#"
>foo</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
></ul
></details
></div
@@ -57,7 +59,9 @@
><p class="src"
><a id="v:foo" class="def"
>foo</a
- > :: Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
diff --git a/html-test/ref/DeprecatedFunction3.html b/html-test/ref/DeprecatedFunction3.html
index 58cffae8..950c5203 100644
--- a/html-test/ref/DeprecatedFunction3.html
+++ b/html-test/ref/DeprecatedFunction3.html
@@ -46,7 +46,9 @@
><li class="src short"
><a href="#"
>foo</a
- > :: Integer</li
+ > :: <a href="#" title="Prelude"
+ >Integer</a
+ ></li
></ul
></details
></div
@@ -57,7 +59,9 @@
><p class="src"
><a id="v:foo" class="def"
>foo</a
- > :: Integer <a href="#" class="selflink"
+ > :: <a href="#" title="Prelude"
+ >Integer</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
diff --git a/html-test/ref/DeprecatedModule.html b/html-test/ref/DeprecatedModule.html
index eb92dad9..91150577 100644
--- a/html-test/ref/DeprecatedModule.html
+++ b/html-test/ref/DeprecatedModule.html
@@ -61,7 +61,9 @@
><p class="src"
><a id="v:foo" class="def"
>foo</a
- > :: Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
></div
diff --git a/html-test/ref/DeprecatedModule2.html b/html-test/ref/DeprecatedModule2.html
index 81f2e024..6688781f 100644
--- a/html-test/ref/DeprecatedModule2.html
+++ b/html-test/ref/DeprecatedModule2.html
@@ -55,7 +55,9 @@
><p class="src"
><a id="v:foo" class="def"
>foo</a
- > :: Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
></div
diff --git a/html-test/ref/DeprecatedNewtype.html b/html-test/ref/DeprecatedNewtype.html
index 2640cbb5..8158f61d 100644
--- a/html-test/ref/DeprecatedNewtype.html
+++ b/html-test/ref/DeprecatedNewtype.html
@@ -50,7 +50,9 @@
>SomeNewType</a
> = <a href="#"
>SomeNewTypeConst</a
- > String</li
+ > <a href="#" title="Data.String"
+ >String</a
+ ></li
><li class="src short"
><span class="keyword"
>newtype</span
@@ -58,7 +60,9 @@
>SomeOtherNewType</a
> = <a href="#"
>SomeOtherNewTypeConst</a
- > String</li
+ > <a href="#" title="Data.String"
+ >String</a
+ ></li
></ul
></details
></div
@@ -90,7 +94,9 @@
><td class="src"
><a id="v:SomeNewTypeConst" class="def"
>SomeNewTypeConst</a
- > String</td
+ > <a href="#" title="Data.String"
+ >String</a
+ ></td
><td class="doc"
><div class="warning"
><p
@@ -126,7 +132,9 @@
><td class="src"
><a id="v:SomeOtherNewTypeConst" class="def"
>SomeOtherNewTypeConst</a
- > String</td
+ > <a href="#" title="Data.String"
+ >String</a
+ ></td
><td class="doc"
><div class="warning"
><p
diff --git a/html-test/ref/DeprecatedReExport.html b/html-test/ref/DeprecatedReExport.html
index 214be4f4..f2bbb766 100644
--- a/html-test/ref/DeprecatedReExport.html
+++ b/html-test/ref/DeprecatedReExport.html
@@ -72,7 +72,9 @@
><li class="src short"
><a href="#"
>foo</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
></ul
></details
></div
@@ -85,7 +87,9 @@
><p class="src"
><a id="v:foo" class="def"
>foo</a
- > :: Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
diff --git a/html-test/ref/DeprecatedRecord.html b/html-test/ref/DeprecatedRecord.html
index 5ff532a4..c2de1538 100644
--- a/html-test/ref/DeprecatedRecord.html
+++ b/html-test/ref/DeprecatedRecord.html
@@ -54,11 +54,15 @@
><li
><a href="#"
>fooName</a
- > :: String</li
+ > :: <a href="#" title="Data.String"
+ >String</a
+ ></li
><li
><a href="#"
>fooValue</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
></ul
>}</li
></ul
@@ -102,7 +106,9 @@
><dfn class="src"
><a id="v:fooName" class="def"
>fooName</a
- > :: String</dfn
+ > :: <a href="#" title="Data.String"
+ >String</a
+ ></dfn
><div class="doc"
><p
>some name</p
@@ -112,7 +118,9 @@
><dfn class="src"
><a id="v:fooValue" class="def"
>fooValue</a
- > :: Int</dfn
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></dfn
><div class="doc"
><div class="warning"
><p
diff --git a/html-test/ref/DeprecatedTypeSynonym.html b/html-test/ref/DeprecatedTypeSynonym.html
index 25526d72..fcb7f5ce 100644
--- a/html-test/ref/DeprecatedTypeSynonym.html
+++ b/html-test/ref/DeprecatedTypeSynonym.html
@@ -48,13 +48,17 @@
>type</span
> <a href="#"
>TypeSyn</a
- > = String</li
+ > = <a href="#" title="Data.String"
+ >String</a
+ ></li
><li class="src short"
><span class="keyword"
>type</span
> <a href="#"
>OtherTypeSyn</a
- > = String</li
+ > = <a href="#" title="Data.String"
+ >String</a
+ ></li
></ul
></details
></div
@@ -67,7 +71,9 @@
>type</span
> <a id="t:TypeSyn" class="def"
>TypeSyn</a
- > = String <a href="#" class="selflink"
+ > = <a href="#" title="Data.String"
+ >String</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
@@ -85,7 +91,9 @@
>type</span
> <a id="t:OtherTypeSyn" class="def"
>OtherTypeSyn</a
- > = String <a href="#" class="selflink"
+ > = <a href="#" title="Data.String"
+ >String</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
diff --git a/html-test/ref/Examples.html b/html-test/ref/Examples.html
index 7eeb5f7c..77a341f0 100644
--- a/html-test/ref/Examples.html
+++ b/html-test/ref/Examples.html
@@ -46,7 +46,11 @@
><li class="src short"
><a href="#"
>fib</a
- > :: Integer -&gt; Integer</li
+ > :: <a href="#" title="Prelude"
+ >Integer</a
+ > -&gt; <a href="#" title="Prelude"
+ >Integer</a
+ ></li
></ul
></details
></div
@@ -57,13 +61,19 @@
><p class="src"
><a id="v:fib" class="def"
>fib</a
- > :: Integer -&gt; Integer <a href="#" class="selflink"
+ > :: <a href="#" title="Prelude"
+ >Integer</a
+ > -&gt; <a href="#" title="Prelude"
+ >Integer</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
><p
>Fibonacci number of given <code
- >Integer</code
+ ><a href="#" title="Prelude"
+ >Integer</a
+ ></code
>.</p
><p
>Examples:</p
diff --git a/html-test/ref/FunArgs.html b/html-test/ref/FunArgs.html
index ae890105..97c9a3c5 100644
--- a/html-test/ref/FunArgs.html
+++ b/html-test/ref/FunArgs.html
@@ -54,13 +54,17 @@
><table
><tr
><td class="src"
- >:: Ord a</td
+ >:: <a href="#" title="Data.Ord"
+ >Ord</a
+ > a</td
><td class="doc empty"
></td
></tr
><tr
><td class="src"
- >=&gt; Int</td
+ >=&gt; <a href="#" title="Data.Int"
+ >Int</a
+ ></td
><td class="doc"
><p
>First argument</p
@@ -76,7 +80,9 @@
></tr
><tr
><td class="src"
- >-&gt; Bool</td
+ >-&gt; <a href="#" title="Data.Bool"
+ >Bool</a
+ ></td
><td class="doc"
><p
>Third argument</p
@@ -208,7 +214,9 @@
><td class="src"
>:: <span class="keyword"
>forall</span
- > (b :: ()). d ~ ()</td
+ > (b :: ()). d ~ <a href="#" title="GHC.Tuple"
+ >()</a
+ ></td
><td class="doc empty"
></td
></tr
diff --git a/html-test/ref/GADTRecords.html b/html-test/ref/GADTRecords.html
index 1f0c87e8..5f6141db 100644
--- a/html-test/ref/GADTRecords.html
+++ b/html-test/ref/GADTRecords.html
@@ -60,7 +60,9 @@
><li
><a href="#"
>C2</a
- > :: Ord a =&gt; [a] -&gt; <a href="#" title="GADTRecords"
+ > :: <a href="#" title="Data.Ord"
+ >Ord</a
+ > a =&gt; [a] -&gt; <a href="#" title="GADTRecords"
>H1</a
> a a</li
><li
@@ -68,13 +70,19 @@
>C3</a
> :: {..} -&gt; <a href="#" title="GADTRecords"
>H1</a
- > Int Int</li
+ > <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" title="Data.Int"
+ >Int</a
+ ></li
><li
><a href="#"
>C4</a
> :: {..} -&gt; <a href="#" title="GADTRecords"
>H1</a
- > Int a</li
+ > <a href="#" title="Data.Int"
+ >Int</a
+ > a</li
></ul
></li
></ul
@@ -116,7 +124,9 @@
><td class="src"
><a id="v:C2" class="def"
>C2</a
- > :: Ord a =&gt; [a] -&gt; <a href="#" title="GADTRecords"
+ > :: <a href="#" title="Data.Ord"
+ >Ord</a
+ > a =&gt; [a] -&gt; <a href="#" title="GADTRecords"
>H1</a
> a a</td
><td class="doc empty"
@@ -140,7 +150,9 @@
><dfn class="src"
>:: { <a id="v:field" class="def"
>field</a
- > :: Int</dfn
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></dfn
><div class="doc"
><p
>hello docs</p
@@ -150,7 +162,11 @@
><dfn class="src"
>} -&gt; <a href="#" title="GADTRecords"
>H1</a
- > Int Int</dfn
+ > <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" title="Data.Int"
+ >Int</a
+ ></dfn
><div class="doc empty"
></div
></li
@@ -186,7 +202,9 @@
><dfn class="src"
>} -&gt; <a href="#" title="GADTRecords"
>H1</a
- > Int a</dfn
+ > <a href="#" title="Data.Int"
+ >Int</a
+ > a</dfn
><div class="doc empty"
></div
></li
diff --git a/html-test/ref/GadtConstructorArgs.html b/html-test/ref/GadtConstructorArgs.html
new file mode 100644
index 00000000..7497de83
--- /dev/null
+++ b/html-test/ref/GadtConstructorArgs.html
@@ -0,0 +1,192 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+><head
+ ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"
+ /><title
+ >GadtConstructorArgs</title
+ ><link href="#" rel="stylesheet" type="text/css" title="Ocean"
+ /><link rel="stylesheet" type="text/css" href="#"
+ /><script src="haddock-bundle.min.js" async="async" type="text/javascript"
+ ></script
+ ><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
+ ></head
+ ><body
+ ><div id="package-header"
+ ><ul class="links" id="page-menu"
+ ><li
+ ><a href="#"
+ >Contents</a
+ ></li
+ ><li
+ ><a href="#"
+ >Index</a
+ ></li
+ ></ul
+ ><p class="caption empty"
+ ></p
+ ></div
+ ><div id="content"
+ ><div id="module-header"
+ ><table class="info"
+ ><tr
+ ><th
+ >Safe Haskell</th
+ ><td
+ >Safe</td
+ ></tr
+ ></table
+ ><p class="caption"
+ >GadtConstructorArgs</p
+ ></div
+ ><div id="interface"
+ ><h1
+ >Documentation</h1
+ ><div class="top"
+ ><p class="src"
+ ><span class="keyword"
+ >data</span
+ > <a id="t:Boo" class="def"
+ >Boo</a
+ > <span class="keyword"
+ >where</span
+ > <a href="#" class="selflink"
+ >#</a
+ ></p
+ ><div class="subs constructors"
+ ><p class="caption"
+ >Constructors</p
+ ><table
+ ><tr
+ ><td class="src"
+ ><a id="v:Fot" class="def"
+ >Fot</a
+ ></td
+ ><td class="doc empty"
+ ></td
+ ></tr
+ ><tr
+ ><td colspan="2"
+ ><div class="subs fields"
+ ><p class="caption"
+ >Fields</p
+ ><ul
+ ><li
+ ><dfn class="src"
+ >:: { <a id="v:x" class="def"
+ >x</a
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></dfn
+ ><div class="doc"
+ ><p
+ >an <code
+ ><a href="#" title="GadtConstructorArgs"
+ >x</a
+ ></code
+ ></p
+ ></div
+ ></li
+ ><li
+ ><dfn class="src"
+ >, <a id="v:y" class="def"
+ >y</a
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></dfn
+ ><div class="doc"
+ ><p
+ >a <code
+ ><a href="#" title="GadtConstructorArgs"
+ >y</a
+ ></code
+ ></p
+ ></div
+ ></li
+ ><li
+ ><dfn class="src"
+ >} -&gt; <a href="#" title="GadtConstructorArgs"
+ >Boo</a
+ ></dfn
+ ><div class="doc empty"
+ ></div
+ ></li
+ ></ul
+ ></div
+ ></td
+ ></tr
+ ><tr
+ ><td class="src"
+ ><a id="v:Fob" class="def"
+ >Fob</a
+ ></td
+ ><td class="doc"
+ ><p
+ >Record GADT with docs</p
+ ></td
+ ></tr
+ ><tr
+ ><td colspan="2"
+ ><div class="subs fields"
+ ><p class="caption"
+ >Fields</p
+ ><ul
+ ><li
+ ><dfn class="src"
+ >:: { <a id="v:w" class="def"
+ >w</a
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></dfn
+ ><div class="doc"
+ ><p
+ >a <code
+ ><a href="#" title="GadtConstructorArgs"
+ >w</a
+ ></code
+ ></p
+ ></div
+ ></li
+ ><li
+ ><dfn class="src"
+ >, <a id="v:z" class="def"
+ >z</a
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></dfn
+ ><div class="doc"
+ ><p
+ >a <code
+ ><a href="#" title="GadtConstructorArgs"
+ >z</a
+ ></code
+ ></p
+ ></div
+ ></li
+ ><li
+ ><dfn class="src"
+ >} -&gt; <a href="#" title="GadtConstructorArgs"
+ >Boo</a
+ ></dfn
+ ><div class="doc"
+ ><p
+ >a <code
+ ><a href="#" title="GadtConstructorArgs"
+ >Boo</a
+ ></code
+ ></p
+ ></div
+ ></li
+ ></ul
+ ></div
+ ></td
+ ></tr
+ ></table
+ ></div
+ ></div
+ ></div
+ ></div
+ ><div id="footer"
+ ></div
+ ></body
+ ></html
+> \ No newline at end of file
diff --git a/html-test/ref/Hash.html b/html-test/ref/Hash.html
index c4f04f2c..8fd04bb4 100644
--- a/html-test/ref/Hash.html
+++ b/html-test/ref/Hash.html
@@ -87,23 +87,37 @@
><li class="src short"
><a href="#"
>new</a
- > :: (Eq key, <a href="#" title="Hash"
+ > :: (<a href="#" title="Data.Eq"
+ >Eq</a
+ > key, <a href="#" title="Hash"
>Hash</a
- > key) =&gt; Int -&gt; IO (<a href="#" title="Hash"
+ > key) =&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; <a href="#" title="System.IO"
+ >IO</a
+ > (<a href="#" title="Hash"
>HashTable</a
> key val)</li
><li class="src short"
><a href="#"
>insert</a
- > :: (Eq key, <a href="#" title="Hash"
+ > :: (<a href="#" title="Data.Eq"
+ >Eq</a
+ > key, <a href="#" title="Hash"
>Hash</a
- > key) =&gt; key -&gt; val -&gt; IO ()</li
+ > key) =&gt; key -&gt; val -&gt; <a href="#" title="System.IO"
+ >IO</a
+ > ()</li
><li class="src short"
><a href="#"
>lookup</a
> :: <a href="#" title="Hash"
>Hash</a
- > key =&gt; key -&gt; IO (Maybe val)</li
+ > key =&gt; key -&gt; <a href="#" title="System.IO"
+ >IO</a
+ > (<a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > val)</li
><li class="src short"
><span class="keyword"
>class</span
@@ -115,7 +129,9 @@
><li
><a href="#"
>hash</a
- > :: a -&gt; Int</li
+ > :: a -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ ></li
></ul
></li
></ul
@@ -147,7 +163,9 @@
The type <code
>key</code
> should be an instance of <code
- >Eq</code
+ ><a href="#" title="Data.Eq"
+ >Eq</a
+ ></code
>.</p
></div
></div
@@ -161,9 +179,15 @@
><p class="src"
><a id="v:new" class="def"
>new</a
- > :: (Eq key, <a href="#" title="Hash"
+ > :: (<a href="#" title="Data.Eq"
+ >Eq</a
+ > key, <a href="#" title="Hash"
>Hash</a
- > key) =&gt; Int -&gt; IO (<a href="#" title="Hash"
+ > key) =&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; <a href="#" title="System.IO"
+ >IO</a
+ > (<a href="#" title="Hash"
>HashTable</a
> key val) <a href="#" class="selflink"
>#</a
@@ -177,9 +201,13 @@
><p class="src"
><a id="v:insert" class="def"
>insert</a
- > :: (Eq key, <a href="#" title="Hash"
+ > :: (<a href="#" title="Data.Eq"
+ >Eq</a
+ > key, <a href="#" title="Hash"
>Hash</a
- > key) =&gt; key -&gt; val -&gt; IO () <a href="#" class="selflink"
+ > key) =&gt; key -&gt; val -&gt; <a href="#" title="System.IO"
+ >IO</a
+ > () <a href="#" class="selflink"
>#</a
></p
><div class="doc"
@@ -193,18 +221,26 @@
>lookup</a
> :: <a href="#" title="Hash"
>Hash</a
- > key =&gt; key -&gt; IO (Maybe val) <a href="#" class="selflink"
+ > key =&gt; key -&gt; <a href="#" title="System.IO"
+ >IO</a
+ > (<a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > val) <a href="#" class="selflink"
>#</a
></p
><div class="doc"
><p
>Looks up a key in the hash table, returns <code
><code
- >Just</code
+ ><a href="#" title="GHC.Maybe"
+ >Just</a
+ ></code
> val</code
> if the key
was found, or <code
- >Nothing</code
+ ><a href="#" title="GHC.Maybe"
+ >Nothing</a
+ ></code
> otherwise.</p
></div
></div
@@ -235,7 +271,9 @@
><p class="src"
><a id="v:hash" class="def"
>hash</a
- > :: a -&gt; Int <a href="#" class="selflink"
+ > :: a -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
@@ -243,7 +281,9 @@
>hashes the value of type <code
>a</code
> into an <code
- >Int</code
+ ><a href="#" title="Data.Int"
+ >Int</a
+ ></code
></p
></div
></div
@@ -259,7 +299,9 @@
></span
> <a href="#" title="Hash"
>Hash</a
- > Float</span
+ > <a href="#" title="Prelude"
+ >Float</a
+ ></span
> <a href="#" class="selflink"
>#</a
></td
@@ -281,7 +323,11 @@
><p class="src"
><a href="#"
>hash</a
- > :: Float -&gt; Int <a href="#" class="selflink"
+ > :: <a href="#" title="Prelude"
+ >Float</a
+ > -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
></div
@@ -295,7 +341,9 @@
></span
> <a href="#" title="Hash"
>Hash</a
- > Int</span
+ > <a href="#" title="Data.Int"
+ >Int</a
+ ></span
> <a href="#" class="selflink"
>#</a
></td
@@ -317,7 +365,11 @@
><p class="src"
><a href="#"
>hash</a
- > :: Int -&gt; Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
></div
@@ -357,7 +409,9 @@
><p class="src"
><a href="#"
>hash</a
- > :: (a, b) -&gt; Int <a href="#" class="selflink"
+ > :: (a, b) -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
></div
diff --git a/html-test/ref/HiddenInstances.html b/html-test/ref/HiddenInstances.html
index eb39dafc..9594d8e1 100644
--- a/html-test/ref/HiddenInstances.html
+++ b/html-test/ref/HiddenInstances.html
@@ -86,7 +86,9 @@
></span
> <a href="#" title="HiddenInstances"
>VisibleClass</a
- > Int</span
+ > <a href="#" title="Data.Int"
+ >Int</a
+ ></span
> <a href="#" class="selflink"
>#</a
></td
@@ -164,7 +166,9 @@
><span class="inst-left"
><span class="instance details-toggle-control details-toggle" data-details-id="i:id:VisibleData:Num:1"
></span
- > Num <a href="#" title="HiddenInstances"
+ > <a href="#" title="Prelude"
+ >Num</a
+ > <a href="#" title="HiddenInstances"
>VisibleData</a
></span
> <a href="#" class="selflink"
@@ -196,6 +200,8 @@
>VisibleData</a
> -&gt; <a href="#" title="HiddenInstances"
>VisibleData</a
+ > <a href="#" class="selflink"
+ >#</a
></p
><p class="src"
><a href="#"
@@ -206,6 +212,8 @@
>VisibleData</a
> -&gt; <a href="#" title="HiddenInstances"
>VisibleData</a
+ > <a href="#" class="selflink"
+ >#</a
></p
><p class="src"
><a href="#"
@@ -216,6 +224,8 @@
>VisibleData</a
> -&gt; <a href="#" title="HiddenInstances"
>VisibleData</a
+ > <a href="#" class="selflink"
+ >#</a
></p
><p class="src"
><a href="#"
@@ -224,6 +234,8 @@
>VisibleData</a
> -&gt; <a href="#" title="HiddenInstances"
>VisibleData</a
+ > <a href="#" class="selflink"
+ >#</a
></p
><p class="src"
><a href="#"
@@ -232,6 +244,8 @@
>VisibleData</a
> -&gt; <a href="#" title="HiddenInstances"
>VisibleData</a
+ > <a href="#" class="selflink"
+ >#</a
></p
><p class="src"
><a href="#"
@@ -240,12 +254,18 @@
>VisibleData</a
> -&gt; <a href="#" title="HiddenInstances"
>VisibleData</a
+ > <a href="#" class="selflink"
+ >#</a
></p
><p class="src"
><a href="#"
>fromInteger</a
- > :: Integer -&gt; <a href="#" title="HiddenInstances"
+ > :: <a href="#" title="Prelude"
+ >Integer</a
+ > -&gt; <a href="#" title="HiddenInstances"
>VisibleData</a
+ > <a href="#" class="selflink"
+ >#</a
></p
></div
></details
diff --git a/html-test/ref/Hyperlinks.html b/html-test/ref/Hyperlinks.html
index 58d012a5..f331e741 100644
--- a/html-test/ref/Hyperlinks.html
+++ b/html-test/ref/Hyperlinks.html
@@ -46,7 +46,9 @@
><li class="src short"
><a href="#"
>foo</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
></ul
></details
></div
@@ -57,7 +59,9 @@
><p class="src"
><a id="v:foo" class="def"
>foo</a
- > :: Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
diff --git a/html-test/ref/Instances.html b/html-test/ref/Instances.html
index 40b1045c..a23f9eb9 100644
--- a/html-test/ref/Instances.html
+++ b/html-test/ref/Instances.html
@@ -102,7 +102,9 @@
>foo</a
> :: (a <a href="#" title="Instances"
>&lt;~~</a
- > Int) -&gt; a0 -&gt; a <a href="#" title="Instances"
+ > <a href="#" title="Data.Int"
+ >Int</a
+ >) -&gt; a0 -&gt; a <a href="#" title="Instances"
>&lt;~~</a
> a0 <a href="#" class="selflink"
>#</a
@@ -114,11 +116,15 @@
>&lt;~~</a
> (a <a href="#" title="Instances"
>&lt;~~</a
- > a0)) -&gt; Int -&gt; a <a href="#" title="Instances"
+ > a0)) -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; a <a href="#" title="Instances"
>&lt;~~</a
> (a <a href="#" title="Instances"
>&lt;~~</a
- > Int) <a href="#" class="selflink"
+ > <a href="#" title="Data.Int"
+ >Int</a
+ >) <a href="#" class="selflink"
>#</a
></p
></div
@@ -152,13 +158,19 @@
><p class="src"
><a id="v:foo" class="def"
>foo</a
- > :: f Int -&gt; a -&gt; f a <a href="#" class="selflink"
+ > :: f <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; a -&gt; f a <a href="#" class="selflink"
>#</a
></p
><p class="src"
><a id="v:foo-39-" class="def"
>foo'</a
- > :: f (f a) -&gt; Int -&gt; f (f Int) <a href="#" class="selflink"
+ > :: f (f a) -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; f (f <a href="#" title="Data.Int"
+ >Int</a
+ >) <a href="#" class="selflink"
>#</a
></p
></div
@@ -196,13 +208,19 @@
><p class="src"
><a href="#"
>foo</a
- > :: [Int] -&gt; a -&gt; [a] <a href="#" class="selflink"
+ > :: [<a href="#" title="Data.Int"
+ >Int</a
+ >] -&gt; a -&gt; [a] <a href="#" class="selflink"
>#</a
></p
><p class="src"
><a href="#"
>foo'</a
- > :: [[a]] -&gt; Int -&gt; [[Int]] <a href="#" class="selflink"
+ > :: [[a]] -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; [[<a href="#" title="Data.Int"
+ >Int</a
+ >]] <a href="#" class="selflink"
>#</a
></p
></div
@@ -216,7 +234,9 @@
></span
> <a href="#" title="Instances"
>Foo</a
- > Maybe</span
+ > <a href="#" title="GHC.Maybe"
+ >Maybe</a
+ ></span
> <a href="#" class="selflink"
>#</a
></td
@@ -238,13 +258,31 @@
><p class="src"
><a href="#"
>foo</a
- > :: Maybe Int -&gt; a -&gt; Maybe a <a href="#" class="selflink"
+ > :: <a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; a -&gt; <a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > a <a href="#" class="selflink"
>#</a
></p
><p class="src"
><a href="#"
>foo'</a
- > :: Maybe (Maybe a) -&gt; Int -&gt; Maybe (Maybe Int) <a href="#" class="selflink"
+ > :: <a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > (<a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > a) -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; <a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > (<a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > <a href="#" title="Data.Int"
+ >Int</a
+ >) <a href="#" class="selflink"
>#</a
></p
></div
@@ -258,7 +296,9 @@
></span
> <a href="#" title="Instances"
>Foo</a
- > (Either a)</span
+ > (<a href="#" title="Data.Either"
+ >Either</a
+ > a)</span
> <a href="#" class="selflink"
>#</a
></td
@@ -280,13 +320,31 @@
><p class="src"
><a href="#"
>foo</a
- > :: Either a Int -&gt; a0 -&gt; Either a a0 <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Either"
+ >Either</a
+ > a <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; a0 -&gt; <a href="#" title="Data.Either"
+ >Either</a
+ > a a0 <a href="#" class="selflink"
>#</a
></p
><p class="src"
><a href="#"
>foo'</a
- > :: Either a (Either a a0) -&gt; Int -&gt; Either a (Either a Int) <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Either"
+ >Either</a
+ > a (<a href="#" title="Data.Either"
+ >Either</a
+ > a a0) -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; <a href="#" title="Data.Either"
+ >Either</a
+ > a (<a href="#" title="Data.Either"
+ >Either</a
+ > a <a href="#" title="Data.Int"
+ >Int</a
+ >) <a href="#" class="selflink"
>#</a
></p
></div
@@ -298,11 +356,15 @@
><span class="inst-left"
><span class="instance details-toggle-control details-toggle" data-details-id="i:ic:Foo:Foo:4"
></span
- > (Eq a, <a href="#" title="Instances"
+ > (<a href="#" title="Data.Eq"
+ >Eq</a
+ > a, <a href="#" title="Instances"
>Foo</a
> f) =&gt; <a href="#" title="Instances"
>Foo</a
- > ((,) (f a))</span
+ > (<a href="#" title="GHC.Tuple"
+ >(,)</a
+ > (f a))</span
> <a href="#" class="selflink"
>#</a
></td
@@ -324,13 +386,19 @@
><p class="src"
><a href="#"
>foo</a
- > :: (f a, Int) -&gt; a0 -&gt; (f a, a0) <a href="#" class="selflink"
+ > :: (f a, <a href="#" title="Data.Int"
+ >Int</a
+ >) -&gt; a0 -&gt; (f a, a0) <a href="#" class="selflink"
>#</a
></p
><p class="src"
><a href="#"
>foo'</a
- > :: (f a, (f a, a0)) -&gt; Int -&gt; (f a, (f a, Int)) <a href="#" class="selflink"
+ > :: (f a, (f a, a0)) -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; (f a, (f a, <a href="#" title="Data.Int"
+ >Int</a
+ >)) <a href="#" class="selflink"
>#</a
></p
></div
@@ -370,7 +438,9 @@
>foo</a
> :: (a <a href="#" title="Instances"
>&lt;~~</a
- > Int) -&gt; a0 -&gt; a <a href="#" title="Instances"
+ > <a href="#" title="Data.Int"
+ >Int</a
+ >) -&gt; a0 -&gt; a <a href="#" title="Instances"
>&lt;~~</a
> a0 <a href="#" class="selflink"
>#</a
@@ -382,11 +452,15 @@
>&lt;~~</a
> (a <a href="#" title="Instances"
>&lt;~~</a
- > a0)) -&gt; Int -&gt; a <a href="#" title="Instances"
+ > a0)) -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; a <a href="#" title="Instances"
>&lt;~~</a
> (a <a href="#" title="Instances"
>&lt;~~</a
- > Int) <a href="#" class="selflink"
+ > <a href="#" title="Data.Int"
+ >Int</a
+ >) <a href="#" class="selflink"
>#</a
></p
></div
@@ -400,7 +474,9 @@
></span
> <a href="#" title="Instances"
>Foo</a
- > ((,,) a a)</span
+ > (<a href="#" title="GHC.Tuple"
+ >(,,)</a
+ > a a)</span
> <a href="#" class="selflink"
>#</a
></td
@@ -422,13 +498,19 @@
><p class="src"
><a href="#"
>foo</a
- > :: (a, a, Int) -&gt; a0 -&gt; (a, a, a0) <a href="#" class="selflink"
+ > :: (a, a, <a href="#" title="Data.Int"
+ >Int</a
+ >) -&gt; a0 -&gt; (a, a, a0) <a href="#" class="selflink"
>#</a
></p
><p class="src"
><a href="#"
>foo'</a
- > :: (a, a, (a, a, a0)) -&gt; Int -&gt; (a, a, (a, a, Int)) <a href="#" class="selflink"
+ > :: (a, a, (a, a, a0)) -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; (a, a, (a, a, <a href="#" title="Data.Int"
+ >Int</a
+ >)) <a href="#" class="selflink"
>#</a
></p
></div
@@ -468,7 +550,9 @@
>foo</a
> :: <a href="#" title="Instances"
>Quux</a
- > a b Int -&gt; a0 -&gt; <a href="#" title="Instances"
+ > a b <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; a0 -&gt; <a href="#" title="Instances"
>Quux</a
> a b a0 <a href="#" class="selflink"
>#</a
@@ -480,11 +564,15 @@
>Quux</a
> a b (<a href="#" title="Instances"
>Quux</a
- > a b a0) -&gt; Int -&gt; <a href="#" title="Instances"
+ > a b a0) -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; <a href="#" title="Instances"
>Quux</a
> a b (<a href="#" title="Instances"
>Quux</a
- > a b Int) <a href="#" class="selflink"
+ > a b <a href="#" title="Data.Int"
+ >Int</a
+ >) <a href="#" class="selflink"
>#</a
></p
></div
@@ -498,7 +586,11 @@
></span
> <a href="#" title="Instances"
>Foo</a
- > ((-&gt;) a :: * -&gt; *)</span
+ > ((-&gt;) a :: <a href="#" title="Data.Kind"
+ >Type</a
+ > -&gt; <a href="#" title="Data.Kind"
+ >Type</a
+ >)</span
> <a href="#" class="selflink"
>#</a
></td
@@ -520,13 +612,19 @@
><p class="src"
><a href="#"
>foo</a
- > :: (a -&gt; Int) -&gt; a0 -&gt; a -&gt; a0 <a href="#" class="selflink"
+ > :: (a -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ >) -&gt; a0 -&gt; a -&gt; a0 <a href="#" class="selflink"
>#</a
></p
><p class="src"
><a href="#"
>foo'</a
- > :: (a -&gt; (a -&gt; a0)) -&gt; Int -&gt; a -&gt; (a -&gt; Int) <a href="#" class="selflink"
+ > :: (a -&gt; (a -&gt; a0)) -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; a -&gt; (a -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ >) <a href="#" class="selflink"
>#</a
></p
></div
@@ -562,7 +660,9 @@
><p class="src"
><a id="v:bar" class="def"
>bar</a
- > :: f a -&gt; f Bool -&gt; a <a href="#" class="selflink"
+ > :: f a -&gt; f <a href="#" title="Data.Bool"
+ >Bool</a
+ > -&gt; a <a href="#" class="selflink"
>#</a
></p
><p class="src"
@@ -596,7 +696,11 @@
></span
> <a href="#" title="Instances"
>Bar</a
- > Maybe Bool</span
+ > <a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > <a href="#" title="Data.Bool"
+ >Bool</a
+ ></span
> <a href="#" class="selflink"
>#</a
></td
@@ -618,25 +722,71 @@
><p class="src"
><a href="#"
>bar</a
- > :: Maybe Bool -&gt; Maybe Bool -&gt; Bool <a href="#" class="selflink"
+ > :: <a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > <a href="#" title="Data.Bool"
+ >Bool</a
+ > -&gt; <a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > <a href="#" title="Data.Bool"
+ >Bool</a
+ > -&gt; <a href="#" title="Data.Bool"
+ >Bool</a
+ > <a href="#" class="selflink"
>#</a
></p
><p class="src"
><a href="#"
>bar'</a
- > :: Maybe (Maybe Bool) -&gt; Maybe (Maybe (Maybe b)) <a href="#" class="selflink"
+ > :: <a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > (<a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > <a href="#" title="Data.Bool"
+ >Bool</a
+ >) -&gt; <a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > (<a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > (<a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > b)) <a href="#" class="selflink"
>#</a
></p
><p class="src"
><a href="#"
>bar0</a
- > :: (Maybe Bool, Maybe Bool) -&gt; (Maybe b, Maybe c) <a href="#" class="selflink"
+ > :: (<a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > <a href="#" title="Data.Bool"
+ >Bool</a
+ >, <a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > <a href="#" title="Data.Bool"
+ >Bool</a
+ >) -&gt; (<a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > b, <a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > c) <a href="#" class="selflink"
>#</a
></p
><p class="src"
><a href="#"
>bar1</a
- > :: (Maybe Bool, Maybe Bool) -&gt; (Maybe b, Maybe c) <a href="#" class="selflink"
+ > :: (<a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > <a href="#" title="Data.Bool"
+ >Bool</a
+ >, <a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > <a href="#" title="Data.Bool"
+ >Bool</a
+ >) -&gt; (<a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > b, <a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > c) <a href="#" class="selflink"
>#</a
></p
></div
@@ -650,7 +800,9 @@
></span
> <a href="#" title="Instances"
>Bar</a
- > Maybe [a]</span
+ > <a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > [a]</span
> <a href="#" class="selflink"
>#</a
></td
@@ -672,25 +824,57 @@
><p class="src"
><a href="#"
>bar</a
- > :: Maybe [a] -&gt; Maybe Bool -&gt; [a] <a href="#" class="selflink"
+ > :: <a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > [a] -&gt; <a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > <a href="#" title="Data.Bool"
+ >Bool</a
+ > -&gt; [a] <a href="#" class="selflink"
>#</a
></p
><p class="src"
><a href="#"
>bar'</a
- > :: Maybe (Maybe [a]) -&gt; Maybe (Maybe (Maybe b)) <a href="#" class="selflink"
+ > :: <a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > (<a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > [a]) -&gt; <a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > (<a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > (<a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > b)) <a href="#" class="selflink"
>#</a
></p
><p class="src"
><a href="#"
>bar0</a
- > :: (Maybe [a], Maybe [a]) -&gt; (Maybe b, Maybe c) <a href="#" class="selflink"
+ > :: (<a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > [a], <a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > [a]) -&gt; (<a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > b, <a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > c) <a href="#" class="selflink"
>#</a
></p
><p class="src"
><a href="#"
>bar1</a
- > :: (Maybe [a], Maybe [a]) -&gt; (Maybe b, Maybe c) <a href="#" class="selflink"
+ > :: (<a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > [a], <a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > [a]) -&gt; (<a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > b, <a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > c) <a href="#" class="selflink"
>#</a
></p
></div
@@ -726,7 +910,9 @@
><p class="src"
><a href="#"
>bar</a
- > :: [(a, a)] -&gt; [Bool] -&gt; (a, a) <a href="#" class="selflink"
+ > :: [(a, a)] -&gt; [<a href="#" title="Data.Bool"
+ >Bool</a
+ >] -&gt; (a, a) <a href="#" class="selflink"
>#</a
></p
><p class="src"
@@ -760,7 +946,9 @@
>Foo</a
> f =&gt; <a href="#" title="Instances"
>Bar</a
- > (Either a) (f a)</span
+ > (<a href="#" title="Data.Either"
+ >Either</a
+ > a) (f a)</span
> <a href="#" class="selflink"
>#</a
></td
@@ -782,25 +970,57 @@
><p class="src"
><a href="#"
>bar</a
- > :: Either a (f a) -&gt; Either a Bool -&gt; f a <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Either"
+ >Either</a
+ > a (f a) -&gt; <a href="#" title="Data.Either"
+ >Either</a
+ > a <a href="#" title="Data.Bool"
+ >Bool</a
+ > -&gt; f a <a href="#" class="selflink"
>#</a
></p
><p class="src"
><a href="#"
>bar'</a
- > :: Either a (Either a (f a)) -&gt; Either a (Either a (Either a b)) <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Either"
+ >Either</a
+ > a (<a href="#" title="Data.Either"
+ >Either</a
+ > a (f a)) -&gt; <a href="#" title="Data.Either"
+ >Either</a
+ > a (<a href="#" title="Data.Either"
+ >Either</a
+ > a (<a href="#" title="Data.Either"
+ >Either</a
+ > a b)) <a href="#" class="selflink"
>#</a
></p
><p class="src"
><a href="#"
>bar0</a
- > :: (Either a (f a), Either a (f a)) -&gt; (Either a b, Either a c) <a href="#" class="selflink"
+ > :: (<a href="#" title="Data.Either"
+ >Either</a
+ > a (f a), <a href="#" title="Data.Either"
+ >Either</a
+ > a (f a)) -&gt; (<a href="#" title="Data.Either"
+ >Either</a
+ > a b, <a href="#" title="Data.Either"
+ >Either</a
+ > a c) <a href="#" class="selflink"
>#</a
></p
><p class="src"
><a href="#"
>bar1</a
- > :: (Either a (f a), Either a (f a)) -&gt; (Either a b, Either a c) <a href="#" class="selflink"
+ > :: (<a href="#" title="Data.Either"
+ >Either</a
+ > a (f a), <a href="#" title="Data.Either"
+ >Either</a
+ > a (f a)) -&gt; (<a href="#" title="Data.Either"
+ >Either</a
+ > a b, <a href="#" title="Data.Either"
+ >Either</a
+ > a c) <a href="#" class="selflink"
>#</a
></p
></div
@@ -814,9 +1034,13 @@
></span
> <a href="#" title="Instances"
>Foo</a
- > ((,,) a b) =&gt; <a href="#" title="Instances"
+ > (<a href="#" title="GHC.Tuple"
+ >(,,)</a
+ > a b) =&gt; <a href="#" title="Instances"
>Bar</a
- > ((,,) a b) (a, b, a)</span
+ > (<a href="#" title="GHC.Tuple"
+ >(,,)</a
+ > a b) (a, b, a)</span
> <a href="#" class="selflink"
>#</a
></td
@@ -838,7 +1062,9 @@
><p class="src"
><a href="#"
>bar</a
- > :: (a, b, (a, b, a)) -&gt; (a, b, Bool) -&gt; (a, b, a) <a href="#" class="selflink"
+ > :: (a, b, (a, b, a)) -&gt; (a, b, <a href="#" title="Data.Bool"
+ >Bool</a
+ >) -&gt; (a, b, a) <a href="#" class="selflink"
>#</a
></p
><p class="src"
@@ -902,7 +1128,9 @@
>Quux</a
> a b c) -&gt; <a href="#" title="Instances"
>Quux</a
- > a c Bool -&gt; <a href="#" title="Instances"
+ > a c <a href="#" title="Data.Bool"
+ >Bool</a
+ > -&gt; <a href="#" title="Instances"
>Quux</a
> a b c <a href="#" class="selflink"
>#</a
@@ -1432,7 +1660,9 @@
>foo</a
> :: <a href="#" title="Instances"
>Quux</a
- > a b Int -&gt; a0 -&gt; <a href="#" title="Instances"
+ > a b <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; a0 -&gt; <a href="#" title="Instances"
>Quux</a
> a b a0 <a href="#" class="selflink"
>#</a
@@ -1444,11 +1674,15 @@
>Quux</a
> a b (<a href="#" title="Instances"
>Quux</a
- > a b a0) -&gt; Int -&gt; <a href="#" title="Instances"
+ > a b a0) -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; <a href="#" title="Instances"
>Quux</a
> a b (<a href="#" title="Instances"
>Quux</a
- > a b Int) <a href="#" class="selflink"
+ > a b <a href="#" title="Data.Int"
+ >Int</a
+ >) <a href="#" class="selflink"
>#</a
></p
></div
@@ -1494,7 +1728,9 @@
>Quux</a
> a b c) -&gt; <a href="#" title="Instances"
>Quux</a
- > a c Bool -&gt; <a href="#" title="Instances"
+ > a c <a href="#" title="Data.Bool"
+ >Bool</a
+ > -&gt; <a href="#" title="Instances"
>Quux</a
> a b c <a href="#" class="selflink"
>#</a
@@ -1642,7 +1878,9 @@
>data</span
> <a href="#" title="Instances"
>Thud</a
- > Int (<a href="#" title="Instances"
+ > <a href="#" title="Data.Int"
+ >Int</a
+ > (<a href="#" title="Instances"
>Quux</a
> a [a] c)</span
> <a href="#" class="selflink"
@@ -1665,7 +1903,9 @@
>data</span
> <a href="#" title="Instances"
>Thud</a
- > Int (<a href="#" title="Instances"
+ > <a href="#" title="Data.Int"
+ >Int</a
+ > (<a href="#" title="Instances"
>Quux</a
> a [a] c) <ul class="inst"
><li class="inst"
@@ -1675,7 +1915,11 @@
><li class="inst"
>| <a id="v:Thuuud" class="def"
>Thuuud</a
- > Int Int</li
+ > <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" title="Data.Int"
+ >Int</a
+ ></li
></ul
></div
></details
@@ -1746,7 +1990,11 @@
></span
> <a href="#" title="Instances"
>Norf</a
- > Int Bool</span
+ > <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" title="Data.Bool"
+ >Bool</a
+ ></span
> <a href="#" class="selflink"
>#</a
></td
@@ -1770,7 +2018,13 @@
>type</span
> <a href="#" title="Instances"
>Plugh</a
- > Int c Bool :: * <a href="#" class="selflink"
+ > <a href="#" title="Data.Int"
+ >Int</a
+ > c <a href="#" title="Data.Bool"
+ >Bool</a
+ > :: <a href="#" title="Data.Kind"
+ >Type</a
+ > <a href="#" class="selflink"
>#</a
></p
><p class="src"
@@ -1778,7 +2032,11 @@
>data</span
> <a href="#" title="Instances"
>Thud</a
- > Int c :: * <a href="#" class="selflink"
+ > <a href="#" title="Data.Int"
+ >Int</a
+ > c :: <a href="#" title="Data.Kind"
+ >Type</a
+ > <a href="#" class="selflink"
>#</a
></p
></div
@@ -1790,7 +2048,17 @@
>norf</a
> :: <a href="#" title="Instances"
>Plugh</a
- > Int c Bool -&gt; Int -&gt; (Int -&gt; c) -&gt; Bool <a href="#" class="selflink"
+ > <a href="#" title="Data.Int"
+ >Int</a
+ > c <a href="#" title="Data.Bool"
+ >Bool</a
+ > -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; (<a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; c) -&gt; <a href="#" title="Data.Bool"
+ >Bool</a
+ > <a href="#" class="selflink"
>#</a
></p
></div
@@ -1828,7 +2096,9 @@
>type</span
> <a href="#" title="Instances"
>Plugh</a
- > [a] c [b] :: * <a href="#" class="selflink"
+ > [a] c [b] :: <a href="#" title="Data.Kind"
+ >Type</a
+ > <a href="#" class="selflink"
>#</a
></p
><p class="src"
@@ -1836,7 +2106,9 @@
>data</span
> <a href="#" title="Instances"
>Thud</a
- > [a] c :: * <a href="#" class="selflink"
+ > [a] c :: <a href="#" title="Data.Kind"
+ >Type</a
+ > <a href="#" class="selflink"
>#</a
></p
></div
diff --git a/html-test/ref/Math.html b/html-test/ref/Math.html
index ebdf6385..71079bdd 100644
--- a/html-test/ref/Math.html
+++ b/html-test/ref/Math.html
@@ -62,7 +62,9 @@
><li class="src short"
><a href="#"
>f</a
- > :: Integer</li
+ > :: <a href="#" title="Prelude"
+ >Integer</a
+ ></li
></ul
></details
></div
@@ -73,7 +75,9 @@
><p class="src"
><a id="v:f" class="def"
>f</a
- > :: Integer <a href="#" class="selflink"
+ > :: <a href="#" title="Prelude"
+ >Integer</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
diff --git a/html-test/ref/ModuleWithWarning.html b/html-test/ref/ModuleWithWarning.html
index c29b20d9..7a045575 100644
--- a/html-test/ref/ModuleWithWarning.html
+++ b/html-test/ref/ModuleWithWarning.html
@@ -61,7 +61,9 @@
><p class="src"
><a id="v:foo" class="def"
>foo</a
- > :: Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
></div
diff --git a/html-test/ref/NoLayout.html b/html-test/ref/NoLayout.html
index 1f908ba3..a92d1a34 100644
--- a/html-test/ref/NoLayout.html
+++ b/html-test/ref/NoLayout.html
@@ -46,7 +46,9 @@
><li class="src short"
><a href="#"
>g</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
></ul
></details
></div
@@ -57,7 +59,9 @@
><p class="src"
><a id="v:g" class="def"
>g</a
- > :: Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
diff --git a/html-test/ref/OrphanInstances.html b/html-test/ref/OrphanInstances.html
index a70c9640..16ac16d6 100644
--- a/html-test/ref/OrphanInstances.html
+++ b/html-test/ref/OrphanInstances.html
@@ -86,7 +86,9 @@
>aClass</a
> :: <a href="#" title="OrphanInstancesType"
>AType</a
- > -&gt; Int <a href="#" class="selflink"
+ > -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
></div
diff --git a/html-test/ref/OrphanInstancesClass.html b/html-test/ref/OrphanInstancesClass.html
index c59c43dd..81651e18 100644
--- a/html-test/ref/OrphanInstancesClass.html
+++ b/html-test/ref/OrphanInstancesClass.html
@@ -58,7 +58,9 @@
><p class="src"
><a id="v:aClass" class="def"
>aClass</a
- > :: a -&gt; Int <a href="#" class="selflink"
+ > :: a -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
></div
@@ -102,7 +104,9 @@
>aClass</a
> :: <a href="#" title="OrphanInstancesType"
>AType</a
- > -&gt; Int <a href="#" class="selflink"
+ > -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
></div
diff --git a/html-test/ref/OrphanInstancesType.html b/html-test/ref/OrphanInstancesType.html
index 2714bb1f..ddb85534 100644
--- a/html-test/ref/OrphanInstancesType.html
+++ b/html-test/ref/OrphanInstancesType.html
@@ -58,7 +58,9 @@
><td class="src"
><a id="v:AType" class="def"
>AType</a
- > Int</td
+ > <a href="#" title="Data.Int"
+ >Int</a
+ ></td
><td class="doc empty"
></td
></tr
@@ -104,7 +106,9 @@
>aClass</a
> :: <a href="#" title="OrphanInstancesType"
>AType</a
- > -&gt; Int <a href="#" class="selflink"
+ > -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
></div
diff --git a/html-test/ref/PatternSyns.html b/html-test/ref/PatternSyns.html
index fce20f96..19c1fecf 100644
--- a/html-test/ref/PatternSyns.html
+++ b/html-test/ref/PatternSyns.html
@@ -100,7 +100,9 @@
>data</span
> <a href="#"
>BlubType</a
- > = Show x =&gt; <a href="#"
+ > = <a href="#" title="Text.Show"
+ >Show</a
+ > x =&gt; <a href="#"
>BlubCtor</a
> x</li
><li class="src short"
@@ -110,7 +112,9 @@
>Blub</a
> :: () =&gt; <span class="keyword"
>forall</span
- > x. Show x =&gt; x -&gt; <a href="#" title="PatternSyns"
+ > x. <a href="#" title="Text.Show"
+ >Show</a
+ > x =&gt; x -&gt; <a href="#" title="PatternSyns"
>BlubType</a
></li
><li class="src short"
@@ -136,7 +140,9 @@
>pattern</span
> <a href="#"
>PatWithExplicitSig</a
- > :: Eq somex =&gt; somex -&gt; <a href="#" title="PatternSyns"
+ > :: <a href="#" title="Data.Eq"
+ >Eq</a
+ > somex =&gt; somex -&gt; <a href="#" title="PatternSyns"
>FooType</a
> somex</li
></ul
@@ -264,7 +270,9 @@
><table
><tr
><td class="src"
- >Show x =&gt; <a id="v:BlubCtor" class="def"
+ ><a href="#" title="Text.Show"
+ >Show</a
+ > x =&gt; <a id="v:BlubCtor" class="def"
>BlubCtor</a
> x</td
><td class="doc empty"
@@ -281,7 +289,9 @@
>Blub</a
> :: () =&gt; <span class="keyword"
>forall</span
- > x. Show x =&gt; x -&gt; <a href="#" title="PatternSyns"
+ > x. <a href="#" title="Text.Show"
+ >Show</a
+ > x =&gt; x -&gt; <a href="#" title="PatternSyns"
>BlubType</a
> <a href="#" class="selflink"
>#</a
@@ -355,7 +365,9 @@
>pattern</span
> <a id="v:PatWithExplicitSig" class="def"
>PatWithExplicitSig</a
- > :: Eq somex =&gt; somex -&gt; <a href="#" title="PatternSyns"
+ > :: <a href="#" title="Data.Eq"
+ >Eq</a
+ > somex =&gt; somex -&gt; <a href="#" title="PatternSyns"
>FooType</a
> somex <a href="#" class="selflink"
>#</a
diff --git a/html-test/ref/PromotedTypes.html b/html-test/ref/PromotedTypes.html
index 46a70845..712dde5c 100644
--- a/html-test/ref/PromotedTypes.html
+++ b/html-test/ref/PromotedTypes.html
@@ -104,7 +104,9 @@
><td class="src"
><a id="v:Cons" class="def"
>Cons</a
- > :: Maybe h -&gt; <a href="#" title="PromotedTypes"
+ > :: <a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > h -&gt; <a href="#" title="PromotedTypes"
>Pattern</a
> t -&gt; <a href="#" title="PromotedTypes"
>Pattern</a
@@ -148,7 +150,9 @@
><td class="src"
><a id="v:RevCons" class="def"
>RevCons</a
- > :: Maybe h -&gt; <a href="#" title="PromotedTypes"
+ > :: <a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > h -&gt; <a href="#" title="PromotedTypes"
>RevPattern</a
> t -&gt; <a href="#" title="PromotedTypes"
>RevPattern</a
diff --git a/html-test/ref/Properties.html b/html-test/ref/Properties.html
index 9299486c..daabe6c4 100644
--- a/html-test/ref/Properties.html
+++ b/html-test/ref/Properties.html
@@ -46,7 +46,11 @@
><li class="src short"
><a href="#"
>fib</a
- > :: Integer -&gt; Integer</li
+ > :: <a href="#" title="Prelude"
+ >Integer</a
+ > -&gt; <a href="#" title="Prelude"
+ >Integer</a
+ ></li
></ul
></details
></div
@@ -57,13 +61,19 @@
><p class="src"
><a id="v:fib" class="def"
>fib</a
- > :: Integer -&gt; Integer <a href="#" class="selflink"
+ > :: <a href="#" title="Prelude"
+ >Integer</a
+ > -&gt; <a href="#" title="Prelude"
+ >Integer</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
><p
>Fibonacci number of given <code
- >Integer</code
+ ><a href="#" title="Prelude"
+ >Integer</a
+ ></code
>.</p
><pre
>fib n &lt;= fib (n + 1)</pre
diff --git a/html-test/ref/QuantifiedConstraints.html b/html-test/ref/QuantifiedConstraints.html
new file mode 100644
index 00000000..fa2c18ec
--- /dev/null
+++ b/html-test/ref/QuantifiedConstraints.html
@@ -0,0 +1,100 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+><head
+ ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"
+ /><title
+ >QuantifiedConstraints</title
+ ><link href="#" rel="stylesheet" type="text/css" title="Ocean"
+ /><link rel="stylesheet" type="text/css" href="#"
+ /><script src="haddock-bundle.min.js" async="async" type="text/javascript"
+ ></script
+ ><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
+ ></head
+ ><body
+ ><div id="package-header"
+ ><ul class="links" id="page-menu"
+ ><li
+ ><a href="#"
+ >Contents</a
+ ></li
+ ><li
+ ><a href="#"
+ >Index</a
+ ></li
+ ></ul
+ ><p class="caption empty"
+ ></p
+ ></div
+ ><div id="content"
+ ><div id="module-header"
+ ><table class="info"
+ ><tr
+ ><th
+ >Safe Haskell</th
+ ><td
+ >Safe</td
+ ></tr
+ ></table
+ ><p class="caption"
+ >QuantifiedConstraints</p
+ ></div
+ ><div id="interface"
+ ><h1
+ >Documentation</h1
+ ><div class="top"
+ ><p class="src"
+ ><span class="keyword"
+ >class</span
+ > <a id="t:Foo" class="def"
+ >Foo</a
+ > a <span class="keyword"
+ >where</span
+ > <a href="#" class="selflink"
+ >#</a
+ ></p
+ ><div class="subs methods"
+ ><p class="caption"
+ >Methods</p
+ ><p class="src"
+ ><a id="v:fooed" class="def"
+ >fooed</a
+ > :: a <a href="#" class="selflink"
+ >#</a
+ ></p
+ ></div
+ ></div
+ ><div class="top"
+ ><p class="src"
+ ><a id="v:needsParensAroundContext" class="def"
+ >needsParensAroundContext</a
+ > :: (<span class="keyword"
+ >forall</span
+ > x. <a href="#" title="QuantifiedConstraints"
+ >Foo</a
+ > (f x)) =&gt; f <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
+ >#</a
+ ></p
+ ></div
+ ><div class="top"
+ ><p class="src"
+ ><a id="v:needsNoParensAroundContext" class="def"
+ >needsNoParensAroundContext</a
+ > :: <a href="#" title="QuantifiedConstraints"
+ >Foo</a
+ > (f <a href="#" title="Data.Int"
+ >Int</a
+ >) =&gt; f <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
+ >#</a
+ ></p
+ ></div
+ ></div
+ ></div
+ ><div id="footer"
+ ></div
+ ></body
+ ></html
+> \ No newline at end of file
diff --git a/html-test/ref/QuasiExpr.html b/html-test/ref/QuasiExpr.html
index 42b21f70..dfded323 100644
--- a/html-test/ref/QuasiExpr.html
+++ b/html-test/ref/QuasiExpr.html
@@ -58,7 +58,9 @@
><td class="src"
><a id="v:IntExpr" class="def"
>IntExpr</a
- > Integer</td
+ > <a href="#" title="Prelude"
+ >Integer</a
+ ></td
><td class="doc empty"
></td
></tr
@@ -66,7 +68,9 @@
><td class="src"
><a id="v:AntiIntExpr" class="def"
>AntiIntExpr</a
- > String</td
+ > <a href="#" title="Data.String"
+ >String</a
+ ></td
><td class="doc empty"
></td
></tr
@@ -88,7 +92,9 @@
><td class="src"
><a id="v:AntiExpr" class="def"
>AntiExpr</a
- > String</td
+ > <a href="#" title="Data.String"
+ >String</a
+ ></td
><td class="doc empty"
></td
></tr
@@ -104,7 +110,9 @@
><span class="inst-left"
><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Expr:Show:1"
></span
- > Show <a href="#" title="QuasiExpr"
+ > <a href="#" title="Text.Show"
+ >Show</a
+ > <a href="#" title="QuasiExpr"
>Expr</a
></span
> <a href="#" class="selflink"
@@ -128,21 +136,35 @@
><p class="src"
><a href="#"
>showsPrec</a
- > :: Int -&gt; <a href="#" title="QuasiExpr"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; <a href="#" title="QuasiExpr"
>Expr</a
- > -&gt; ShowS</p
+ > -&gt; <a href="#" title="Text.Show"
+ >ShowS</a
+ > <a href="#" class="selflink"
+ >#</a
+ ></p
><p class="src"
><a href="#"
>show</a
> :: <a href="#" title="QuasiExpr"
>Expr</a
- > -&gt; String</p
+ > -&gt; <a href="#" title="Data.String"
+ >String</a
+ > <a href="#" class="selflink"
+ >#</a
+ ></p
><p class="src"
><a href="#"
>showList</a
> :: [<a href="#" title="QuasiExpr"
>Expr</a
- >] -&gt; ShowS</p
+ >] -&gt; <a href="#" title="Text.Show"
+ >ShowS</a
+ > <a href="#" class="selflink"
+ >#</a
+ ></p
></div
></details
></td
@@ -208,7 +230,9 @@
><span class="inst-left"
><span class="instance details-toggle-control details-toggle" data-details-id="i:id:BinOp:Show:1"
></span
- > Show <a href="#" title="QuasiExpr"
+ > <a href="#" title="Text.Show"
+ >Show</a
+ > <a href="#" title="QuasiExpr"
>BinOp</a
></span
> <a href="#" class="selflink"
@@ -232,21 +256,35 @@
><p class="src"
><a href="#"
>showsPrec</a
- > :: Int -&gt; <a href="#" title="QuasiExpr"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; <a href="#" title="QuasiExpr"
>BinOp</a
- > -&gt; ShowS</p
+ > -&gt; <a href="#" title="Text.Show"
+ >ShowS</a
+ > <a href="#" class="selflink"
+ >#</a
+ ></p
><p class="src"
><a href="#"
>show</a
> :: <a href="#" title="QuasiExpr"
>BinOp</a
- > -&gt; String</p
+ > -&gt; <a href="#" title="Data.String"
+ >String</a
+ > <a href="#" class="selflink"
+ >#</a
+ ></p
><p class="src"
><a href="#"
>showList</a
> :: [<a href="#" title="QuasiExpr"
>BinOp</a
- >] -&gt; ShowS</p
+ >] -&gt; <a href="#" title="Text.Show"
+ >ShowS</a
+ > <a href="#" class="selflink"
+ >#</a
+ ></p
></div
></details
></td
@@ -261,7 +299,9 @@
>eval</a
> :: <a href="#" title="QuasiExpr"
>Expr</a
- > -&gt; Integer <a href="#" class="selflink"
+ > -&gt; <a href="#" title="Prelude"
+ >Integer</a
+ > <a href="#" class="selflink"
>#</a
></p
></div
@@ -269,7 +309,9 @@
><p class="src"
><a id="v:expr" class="def"
>expr</a
- > :: QuasiQuoter <a href="#" class="selflink"
+ > :: <a href="#" title="Language.Haskell.TH.Quote"
+ >QuasiQuoter</a
+ > <a href="#" class="selflink"
>#</a
></p
></div
@@ -277,7 +319,13 @@
><p class="src"
><a id="v:parseExprExp" class="def"
>parseExprExp</a
- > :: String -&gt; Q Exp <a href="#" class="selflink"
+ > :: <a href="#" title="Data.String"
+ >String</a
+ > -&gt; <a href="#" title="Language.Haskell.TH.Syntax"
+ >Q</a
+ > <a href="#" title="Language.Haskell.TH.Syntax"
+ >Exp</a
+ > <a href="#" class="selflink"
>#</a
></p
></div
diff --git a/html-test/ref/QuasiQuote.html b/html-test/ref/QuasiQuote.html
index e9451d8a..c73250b8 100644
--- a/html-test/ref/QuasiQuote.html
+++ b/html-test/ref/QuasiQuote.html
@@ -45,7 +45,9 @@
><p class="src"
><a id="v:val" class="def"
>val</a
- > :: Integer <a href="#" class="selflink"
+ > :: <a href="#" title="Prelude"
+ >Integer</a
+ > <a href="#" class="selflink"
>#</a
></p
></div
diff --git a/html-test/ref/SpuriousSuperclassConstraints.html b/html-test/ref/SpuriousSuperclassConstraints.html
index 00cea04a..47dfd6cd 100644
--- a/html-test/ref/SpuriousSuperclassConstraints.html
+++ b/html-test/ref/SpuriousSuperclassConstraints.html
@@ -86,7 +86,9 @@ Fix spurious superclass constraints bug.</pre
><span class="inst-left"
><span class="instance details-toggle-control details-toggle" data-details-id="i:id:SomeType:Functor:1"
></span
- > Functor (<a href="#" title="SpuriousSuperclassConstraints"
+ > <a href="#" title="Data.Functor"
+ >Functor</a
+ > (<a href="#" title="SpuriousSuperclassConstraints"
>SomeType</a
> f)</span
> <a href="#" class="selflink"
@@ -114,7 +116,9 @@ Fix spurious superclass constraints bug.</pre
>SomeType</a
> f a -&gt; <a href="#" title="SpuriousSuperclassConstraints"
>SomeType</a
- > f b</p
+ > f b <a href="#" class="selflink"
+ >#</a
+ ></p
><p class="src"
><a href="#"
>(&lt;$)</a
@@ -122,7 +126,9 @@ Fix spurious superclass constraints bug.</pre
>SomeType</a
> f b -&gt; <a href="#" title="SpuriousSuperclassConstraints"
>SomeType</a
- > f a</p
+ > f a <a href="#" class="selflink"
+ >#</a
+ ></p
></div
></details
></td
@@ -132,7 +138,11 @@ Fix spurious superclass constraints bug.</pre
><span class="inst-left"
><span class="instance details-toggle-control details-toggle" data-details-id="i:id:SomeType:Applicative:2"
></span
- > Applicative f =&gt; Applicative (<a href="#" title="SpuriousSuperclassConstraints"
+ > <a href="#" title="Control.Applicative"
+ >Applicative</a
+ > f =&gt; <a href="#" title="Control.Applicative"
+ >Applicative</a
+ > (<a href="#" title="SpuriousSuperclassConstraints"
>SomeType</a
> f)</span
> <a href="#" class="selflink"
@@ -158,7 +168,9 @@ Fix spurious superclass constraints bug.</pre
>pure</a
> :: a -&gt; <a href="#" title="SpuriousSuperclassConstraints"
>SomeType</a
- > f a</p
+ > f a <a href="#" class="selflink"
+ >#</a
+ ></p
><p class="src"
><a href="#"
>(&lt;*&gt;)</a
@@ -168,7 +180,9 @@ Fix spurious superclass constraints bug.</pre
>SomeType</a
> f a -&gt; <a href="#" title="SpuriousSuperclassConstraints"
>SomeType</a
- > f b</p
+ > f b <a href="#" class="selflink"
+ >#</a
+ ></p
><p class="src"
><a href="#"
>liftA2</a
@@ -178,7 +192,9 @@ Fix spurious superclass constraints bug.</pre
>SomeType</a
> f b -&gt; <a href="#" title="SpuriousSuperclassConstraints"
>SomeType</a
- > f c</p
+ > f c <a href="#" class="selflink"
+ >#</a
+ ></p
><p class="src"
><a href="#"
>(*&gt;)</a
@@ -188,7 +204,9 @@ Fix spurious superclass constraints bug.</pre
>SomeType</a
> f b -&gt; <a href="#" title="SpuriousSuperclassConstraints"
>SomeType</a
- > f b</p
+ > f b <a href="#" class="selflink"
+ >#</a
+ ></p
><p class="src"
><a href="#"
>(&lt;*)</a
@@ -198,7 +216,9 @@ Fix spurious superclass constraints bug.</pre
>SomeType</a
> f b -&gt; <a href="#" title="SpuriousSuperclassConstraints"
>SomeType</a
- > f a</p
+ > f a <a href="#" class="selflink"
+ >#</a
+ ></p
></div
></details
></td
diff --git a/html-test/ref/TH.html b/html-test/ref/TH.html
index 403abe62..a35204ff 100644
--- a/html-test/ref/TH.html
+++ b/html-test/ref/TH.html
@@ -45,7 +45,11 @@
><p class="src"
><a id="v:decl" class="def"
>decl</a
- > :: Q [Dec] <a href="#" class="selflink"
+ > :: <a href="#" title="Language.Haskell.TH.Syntax"
+ >Q</a
+ > [<a href="#" title="Language.Haskell.TH.Syntax"
+ >Dec</a
+ >] <a href="#" class="selflink"
>#</a
></p
></div
diff --git a/html-test/ref/Test.html b/html-test/ref/Test.html
index d4c2417c..ce180a19 100644
--- a/html-test/ref/Test.html
+++ b/html-test/ref/Test.html
@@ -165,7 +165,13 @@
><li
>= <a href="#"
>A</a
- > Int (Maybe Float)</li
+ > <a href="#" title="Data.Int"
+ >Int</a
+ > (<a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > <a href="#" title="Prelude"
+ >Float</a
+ >)</li
><li
>| <a href="#"
>B</a
@@ -173,7 +179,11 @@
>T</a
> a b, <a href="#" title="Test"
>T</a
- > Int Float)</li
+ > <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" title="Prelude"
+ >Float</a
+ >)</li
></ul
></li
><li class="src short"
@@ -347,7 +357,9 @@
><li
><a href="#"
>p</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
><li
><a href="#"
>q</a
@@ -359,7 +371,9 @@
>r</a
>, <a href="#"
>s</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
></ul
> }</li
><li
@@ -371,11 +385,23 @@
>t</a
> :: T1 -&gt; <a href="#" title="Test"
>T2</a
- > Int Int -&gt; <a href="#" title="Test"
+ > <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; <a href="#" title="Test"
>T3</a
- > Bool Bool -&gt; <a href="#" title="Test"
+ > <a href="#" title="Data.Bool"
+ >Bool</a
+ > <a href="#" title="Data.Bool"
+ >Bool</a
+ > -&gt; <a href="#" title="Test"
>T4</a
- > Float Float -&gt; <a href="#" title="Test"
+ > <a href="#" title="Prelude"
+ >Float</a
+ > <a href="#" title="Prelude"
+ >Float</a
+ > -&gt; <a href="#" title="Test"
>T5</a
> () ()</li
><li
@@ -383,7 +409,9 @@
>u</a
>, <a href="#"
>v</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
></ul
> }</li
></ul
@@ -399,15 +427,21 @@
><li
><a href="#"
>s1</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
><li
><a href="#"
>s2</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
><li
><a href="#"
>s3</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
></ul
>}</li
><li class="src short"
@@ -415,7 +449,9 @@
>p</a
> :: <a href="#" title="Test"
>R</a
- > -&gt; Int</li
+ > -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ ></li
><li class="src short"
><a href="#"
>q</a
@@ -429,7 +465,9 @@
>u</a
> :: <a href="#" title="Test"
>R</a
- > -&gt; Int</li
+ > -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ ></li
><li class="src short"
><span class="keyword"
>class</span
@@ -443,7 +481,9 @@
><li
><a href="#"
>a</a
- > :: IO a</li
+ > :: <a href="#" title="System.IO"
+ >IO</a
+ > a</li
><li
><a href="#"
>b</a
@@ -495,21 +535,33 @@
>a</a
> :: <a href="#" title="Test"
>C</a
- > a =&gt; IO a</li
+ > a =&gt; <a href="#" title="System.IO"
+ >IO</a
+ > a</li
><li class="src short"
><a href="#"
>f</a
> :: <a href="#" title="Test"
>C</a
- > a =&gt; a -&gt; Int</li
+ > a =&gt; a -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ ></li
><li class="src short"
><a href="#"
>g</a
- > :: Int -&gt; IO CInt</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; <a href="#" title="System.IO"
+ >IO</a
+ > CInt</li
><li class="src short"
><a href="#"
>hidden</a
- > :: Int -&gt; Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ ></li
><li class="src short"
>module <a href="#"
>Visible</a
@@ -551,17 +603,39 @@
>T</a
> () () -&gt; <a href="#" title="Test"
>T2</a
- > Int Int -&gt; (<a href="#" title="Test"
+ > <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; (<a href="#" title="Test"
>T3</a
- > Bool Bool -&gt; <a href="#" title="Test"
+ > <a href="#" title="Data.Bool"
+ >Bool</a
+ > <a href="#" title="Data.Bool"
+ >Bool</a
+ > -&gt; <a href="#" title="Test"
>T4</a
- > Float Float) -&gt; <a href="#" title="Test"
+ > <a href="#" title="Prelude"
+ >Float</a
+ > <a href="#" title="Prelude"
+ >Float</a
+ >) -&gt; <a href="#" title="Test"
>T5</a
- > () () -&gt; IO ()</li
+ > () () -&gt; <a href="#" title="System.IO"
+ >IO</a
+ > ()</li
><li class="src short"
><a href="#"
>l</a
- > :: (Int, Int, Float) -&gt; Int</li
+ > :: (<a href="#" title="Data.Int"
+ >Int</a
+ >, <a href="#" title="Data.Int"
+ >Int</a
+ >, <a href="#" title="Prelude"
+ >Float</a
+ >) -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ ></li
><li class="src short"
><a href="#"
>m</a
@@ -569,19 +643,33 @@
>R</a
> -&gt; <a href="#" title="Test"
>N1</a
- > () -&gt; IO Int</li
+ > () -&gt; <a href="#" title="System.IO"
+ >IO</a
+ > <a href="#" title="Data.Int"
+ >Int</a
+ ></li
><li class="src short"
><a href="#"
>o</a
- > :: Float -&gt; IO Float</li
+ > :: <a href="#" title="Prelude"
+ >Float</a
+ > -&gt; <a href="#" title="System.IO"
+ >IO</a
+ > <a href="#" title="Prelude"
+ >Float</a
+ ></li
><li class="src short"
><a href="#"
>f'</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
><li class="src short"
><a href="#"
>withType</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
><li class="src short"
><a href="#"
>withoutType</a
@@ -622,7 +710,13 @@
><td class="src"
><a id="v:A" class="def"
>A</a
- > Int (Maybe Float)</td
+ > <a href="#" title="Data.Int"
+ >Int</a
+ > (<a href="#" title="GHC.Maybe"
+ >Maybe</a
+ > <a href="#" title="Prelude"
+ >Float</a
+ >)</td
><td class="doc"
><p
>This comment describes the <code
@@ -640,7 +734,11 @@
>T</a
> a b, <a href="#" title="Test"
>T</a
- > Int Float)</td
+ > <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" title="Prelude"
+ >Float</a
+ >)</td
><td class="doc"
><p
>This comment describes the <code
@@ -1188,7 +1286,9 @@
><dfn class="src"
><a id="v:p" class="def"
>p</a
- > :: Int</dfn
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></dfn
><div class="doc"
><p
>This comment applies to the <code
@@ -1220,7 +1320,9 @@
>r</a
>, <a id="v:s" class="def"
>s</a
- > :: Int</dfn
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></dfn
><div class="doc"
><p
>This comment applies to both <code
@@ -1264,11 +1366,23 @@
>t</a
> :: T1 -&gt; <a href="#" title="Test"
>T2</a
- > Int Int -&gt; <a href="#" title="Test"
+ > <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; <a href="#" title="Test"
>T3</a
- > Bool Bool -&gt; <a href="#" title="Test"
+ > <a href="#" title="Data.Bool"
+ >Bool</a
+ > <a href="#" title="Data.Bool"
+ >Bool</a
+ > -&gt; <a href="#" title="Test"
>T4</a
- > Float Float -&gt; <a href="#" title="Test"
+ > <a href="#" title="Prelude"
+ >Float</a
+ > <a href="#" title="Prelude"
+ >Float</a
+ > -&gt; <a href="#" title="Test"
>T5</a
> () ()</dfn
><div class="doc empty"
@@ -1280,7 +1394,9 @@
>u</a
>, <a id="v:v" class="def"
>v</a
- > :: Int</dfn
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></dfn
><div class="doc empty"
></div
></li
@@ -1332,7 +1448,9 @@
><dfn class="src"
><a id="v:s1" class="def"
>s1</a
- > :: Int</dfn
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></dfn
><div class="doc"
><p
>The <code
@@ -1346,7 +1464,9 @@
><dfn class="src"
><a id="v:s2" class="def"
>s2</a
- > :: Int</dfn
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></dfn
><div class="doc"
><p
>The <code
@@ -1360,7 +1480,9 @@
><dfn class="src"
><a id="v:s3" class="def"
>s3</a
- > :: Int</dfn
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></dfn
><div class="doc"
><p
>The <code
@@ -1387,7 +1509,9 @@
>p</a
> :: <a href="#" title="Test"
>R</a
- > -&gt; Int <a href="#" class="selflink"
+ > -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
@@ -1425,7 +1549,9 @@
>u</a
> :: <a href="#" title="Test"
>R</a
- > -&gt; Int <a href="#" class="selflink"
+ > -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
></div
@@ -1462,7 +1588,9 @@
><p class="src"
><a id="v:a" class="def"
>a</a
- > :: IO a <a href="#" class="selflink"
+ > :: <a href="#" title="System.IO"
+ >IO</a
+ > a <a href="#" class="selflink"
>#</a
></p
><div class="doc"
@@ -1534,7 +1662,9 @@
></span
> <a href="#" title="Test"
>D</a
- > Float</span
+ > <a href="#" title="Prelude"
+ >Float</a
+ ></span
> <a href="#" class="selflink"
>#</a
></td
@@ -1558,13 +1688,19 @@
>d</a
> :: <a href="#" title="Test"
>T</a
- > Float b <a href="#" class="selflink"
+ > <a href="#" title="Prelude"
+ >Float</a
+ > b <a href="#" class="selflink"
>#</a
></p
><p class="src"
><a href="#"
>e</a
- > :: (Float, Float) <a href="#" class="selflink"
+ > :: (<a href="#" title="Prelude"
+ >Float</a
+ >, <a href="#" title="Prelude"
+ >Float</a
+ >) <a href="#" class="selflink"
>#</a
></p
></div
@@ -1578,7 +1714,9 @@
></span
> <a href="#" title="Test"
>D</a
- > Int</span
+ > <a href="#" title="Data.Int"
+ >Int</a
+ ></span
> <a href="#" class="selflink"
>#</a
></td
@@ -1602,13 +1740,19 @@
>d</a
> :: <a href="#" title="Test"
>T</a
- > Int b <a href="#" class="selflink"
+ > <a href="#" title="Data.Int"
+ >Int</a
+ > b <a href="#" class="selflink"
>#</a
></p
><p class="src"
><a href="#"
>e</a
- > :: (Int, Int) <a href="#" class="selflink"
+ > :: (<a href="#" title="Data.Int"
+ >Int</a
+ >, <a href="#" title="Data.Int"
+ >Int</a
+ >) <a href="#" class="selflink"
>#</a
></p
></div
@@ -1671,7 +1815,9 @@
>a</a
> :: <a href="#" title="Test"
>C</a
- > a =&gt; IO a <a href="#" class="selflink"
+ > a =&gt; <a href="#" title="System.IO"
+ >IO</a
+ > a <a href="#" class="selflink"
>#</a
></p
><div class="doc"
@@ -1693,7 +1839,9 @@
>f</a
> :: <a href="#" title="Test"
>C</a
- > a =&gt; a -&gt; Int <a href="#" class="selflink"
+ > a =&gt; a -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
@@ -1753,7 +1901,11 @@ using double quotes: <a href="#"
><p class="src"
><a id="v:g" class="def"
>g</a
- > :: Int -&gt; IO CInt <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; <a href="#" title="System.IO"
+ >IO</a
+ > CInt <a href="#" class="selflink"
>#</a
></p
><div class="doc"
@@ -1864,7 +2016,11 @@ is at the beginning of the line).</pre
><p class="src"
><a id="v:hidden" class="def"
>hidden</a
- > :: Int -&gt; Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
></div
@@ -1977,7 +2133,11 @@ is at the beginning of the line).</pre
><td class="src"
>-&gt; <a href="#" title="Test"
>T2</a
- > Int Int</td
+ > <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" title="Data.Int"
+ >Int</a
+ ></td
><td class="doc"
><p
>This argument has type 'T2 Int Int'</p
@@ -1987,9 +2147,17 @@ is at the beginning of the line).</pre
><td class="src"
>-&gt; (<a href="#" title="Test"
>T3</a
- > Bool Bool -&gt; <a href="#" title="Test"
+ > <a href="#" title="Data.Bool"
+ >Bool</a
+ > <a href="#" title="Data.Bool"
+ >Bool</a
+ > -&gt; <a href="#" title="Test"
>T4</a
- > Float Float)</td
+ > <a href="#" title="Prelude"
+ >Float</a
+ > <a href="#" title="Prelude"
+ >Float</a
+ >)</td
><td class="doc"
><p
>This argument has type <code
@@ -2011,7 +2179,9 @@ is at the beginning of the line).</pre
></tr
><tr
><td class="src"
- >-&gt; IO ()</td
+ >-&gt; <a href="#" title="System.IO"
+ >IO</a
+ > ()</td
><td class="doc"
><p
>This is the result type</p
@@ -2037,7 +2207,13 @@ is at the beginning of the line).</pre
><table
><tr
><td class="src"
- >:: (Int, Int, Float)</td
+ >:: (<a href="#" title="Data.Int"
+ >Int</a
+ >, <a href="#" title="Data.Int"
+ >Int</a
+ >, <a href="#" title="Prelude"
+ >Float</a
+ >)</td
><td class="doc"
><p
>takes a triple</p
@@ -2045,11 +2221,15 @@ is at the beginning of the line).</pre
></tr
><tr
><td class="src"
- >-&gt; Int</td
+ >-&gt; <a href="#" title="Data.Int"
+ >Int</a
+ ></td
><td class="doc"
><p
>returns an <code
- >Int</code
+ ><a href="#" title="Data.Int"
+ >Int</a
+ ></code
></p
></td
></tr
@@ -2087,7 +2267,11 @@ is at the beginning of the line).</pre
></tr
><tr
><td class="src"
- >-&gt; IO Int</td
+ >-&gt; <a href="#" title="System.IO"
+ >IO</a
+ > <a href="#" title="Data.Int"
+ >Int</a
+ ></td
><td class="doc"
><p
>and the return value</p
@@ -2113,7 +2297,9 @@ is at the beginning of the line).</pre
><table
><tr
><td class="src"
- >:: Float</td
+ >:: <a href="#" title="Prelude"
+ >Float</a
+ ></td
><td class="doc"
><p
>The input float</p
@@ -2121,7 +2307,11 @@ is at the beginning of the line).</pre
></tr
><tr
><td class="src"
- >-&gt; IO Float</td
+ >-&gt; <a href="#" title="System.IO"
+ >IO</a
+ > <a href="#" title="Prelude"
+ >Float</a
+ ></td
><td class="doc"
><p
>The output float</p
@@ -2154,7 +2344,9 @@ is at the beginning of the line).</pre
><p class="src"
><a id="v:f-39-" class="def"
>f'</a
- > :: Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
@@ -2171,7 +2363,9 @@ is at the beginning of the line).</pre
><p class="src"
><a id="v:withType" class="def"
>withType</a
- > :: Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
diff --git a/html-test/ref/Threaded.html b/html-test/ref/Threaded.html
index 8728d4cd..e52ca96b 100644
--- a/html-test/ref/Threaded.html
+++ b/html-test/ref/Threaded.html
@@ -56,7 +56,9 @@
><li class="src short"
><a href="#"
>f</a
- > :: Integer</li
+ > :: <a href="#" title="Prelude"
+ >Integer</a
+ ></li
></ul
></details
></div
@@ -67,7 +69,9 @@
><p class="src"
><a id="v:f" class="def"
>f</a
- > :: Integer <a href="#" class="selflink"
+ > :: <a href="#" title="Prelude"
+ >Integer</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
diff --git a/html-test/ref/Threaded_TH.html b/html-test/ref/Threaded_TH.html
index 7f80b127..14ebe8a9 100644
--- a/html-test/ref/Threaded_TH.html
+++ b/html-test/ref/Threaded_TH.html
@@ -57,7 +57,11 @@
><li class="src short"
><a href="#"
>forkTH</a
- > :: Q Exp</li
+ > :: <a href="#" title="Language.Haskell.TH.Syntax"
+ >Q</a
+ > <a href="#" title="Language.Haskell.TH.Syntax"
+ >Exp</a
+ ></li
></ul
></details
></div
@@ -68,7 +72,11 @@
><p class="src"
><a id="v:forkTH" class="def"
>forkTH</a
- > :: Q Exp <a href="#" class="selflink"
+ > :: <a href="#" title="Language.Haskell.TH.Syntax"
+ >Q</a
+ > <a href="#" title="Language.Haskell.TH.Syntax"
+ >Exp</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
diff --git a/html-test/ref/Ticket112.html b/html-test/ref/Ticket112.html
index a2c4ca1b..00258deb 100644
--- a/html-test/ref/Ticket112.html
+++ b/html-test/ref/Ticket112.html
@@ -63,7 +63,9 @@
><div class="doc"
><p
>...given a raw <code
- >Addr#</code
+ ><a href="#" title="GHC.Exts"
+ >Addr#</a
+ ></code
> to the string, and the length of the string.</p
></div
></div
diff --git a/html-test/ref/Ticket75.html b/html-test/ref/Ticket75.html
index 683a7184..70919c1b 100644
--- a/html-test/ref/Ticket75.html
+++ b/html-test/ref/Ticket75.html
@@ -54,7 +54,9 @@
><li class="src short"
><a href="#"
>f</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
></ul
></details
></div
@@ -89,7 +91,9 @@
><p class="src"
><a id="v:f" class="def"
>f</a
- > :: Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
diff --git a/html-test/ref/TitledPicture.html b/html-test/ref/TitledPicture.html
index 1e6f50e0..eb6c12f4 100644
--- a/html-test/ref/TitledPicture.html
+++ b/html-test/ref/TitledPicture.html
@@ -46,11 +46,15 @@
><li class="src short"
><a href="#"
>foo</a
- > :: Integer</li
+ > :: <a href="#" title="Prelude"
+ >Integer</a
+ ></li
><li class="src short"
><a href="#"
>bar</a
- > :: Integer</li
+ > :: <a href="#" title="Prelude"
+ >Integer</a
+ ></li
></ul
></details
></div
@@ -61,7 +65,9 @@
><p class="src"
><a id="v:foo" class="def"
>foo</a
- > :: Integer <a href="#" class="selflink"
+ > :: <a href="#" title="Prelude"
+ >Integer</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
@@ -78,7 +84,9 @@
><p class="src"
><a id="v:bar" class="def"
>bar</a
- > :: Integer <a href="#" class="selflink"
+ > :: <a href="#" title="Prelude"
+ >Integer</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
diff --git a/html-test/ref/TypeFamilies.html b/html-test/ref/TypeFamilies.html
index 2195a05a..9a4945dd 100644
--- a/html-test/ref/TypeFamilies.html
+++ b/html-test/ref/TypeFamilies.html
@@ -280,7 +280,9 @@
>AssocD</a
> <a href="#" title="TypeFamilies"
>X</a
- > :: * <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Kind"
+ >Type</a
+ > <a href="#" class="selflink"
>#</a
></p
><p class="src"
@@ -290,7 +292,9 @@
>AssocT</a
> <a href="#" title="TypeFamilies"
>X</a
- > :: * <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Kind"
+ >Type</a
+ > <a href="#" class="selflink"
>#</a
></p
></div
@@ -342,8 +346,10 @@
> <a href="#" class="selflink"
>#</a
></td
- ><td class="doc empty"
- ></td
+ ><td class="doc"
+ ><p
+ >External instance</p
+ ></td
></tr
><tr
><td colspan="2"
@@ -489,7 +495,9 @@
>Foo</a
> <a href="#" title="TypeFamilies"
>X</a
- > :: *)</div
+ > :: <a href="#" title="Data.Kind"
+ >Type</a
+ >)</div
></details
></td
></tr
@@ -574,8 +582,10 @@
> <a href="#" class="selflink"
>#</a
></td
- ><td class="doc empty"
- ></td
+ ><td class="doc"
+ ><p
+ >Doc for: type instance Foo X = Y</p
+ ></td
></tr
><tr
><td colspan="2"
@@ -610,7 +620,9 @@
>X</a
> <a href="#" title="TypeFamilies"
>&lt;&gt;</a
- > (a :: *)</span
+ > (a :: <a href="#" title="Data.Kind"
+ >Type</a
+ >)</span
> <a href="#" class="selflink"
>#</a
></td
@@ -633,7 +645,9 @@
>X</a
> <a href="#" title="TypeFamilies"
>&lt;&gt;</a
- > (a :: *) = <a href="#" title="TypeFamilies"
+ > (a :: <a href="#" title="Data.Kind"
+ >Type</a
+ >) = <a href="#" title="TypeFamilies"
>X</a
></div
></details
@@ -698,7 +712,9 @@
>AssocD</a
> <a href="#" title="TypeFamilies"
>Y</a
- > :: * <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Kind"
+ >Type</a
+ > <a href="#" class="selflink"
>#</a
></p
><p class="src"
@@ -708,7 +724,9 @@
>AssocT</a
> <a href="#" title="TypeFamilies"
>Y</a
- > :: * <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Kind"
+ >Type</a
+ > <a href="#" class="selflink"
>#</a
></p
></div
@@ -924,8 +942,10 @@
> <a href="#" class="selflink"
>#</a
></td
- ><td class="doc empty"
- ></td
+ ><td class="doc"
+ ><p
+ >Doc for: type instance Foo Y = X</p
+ ></td
></tr
><tr
><td colspan="2"
@@ -960,7 +980,9 @@
>Y</a
> <a href="#" title="TypeFamilies"
>&lt;&gt;</a
- > (a :: *)</span
+ > (a :: <a href="#" title="Data.Kind"
+ >Type</a
+ >)</span
> <a href="#" class="selflink"
>#</a
></td
@@ -983,7 +1005,9 @@
>Y</a
> <a href="#" title="TypeFamilies"
>&lt;&gt;</a
- > (a :: *) = a</div
+ > (a :: <a href="#" title="Data.Kind"
+ >Type</a
+ >) = a</div
></details
></td
></tr
@@ -1220,8 +1244,10 @@
> <a href="#" class="selflink"
>#</a
></td
- ><td class="doc empty"
- ></td
+ ><td class="doc"
+ ><p
+ >Doc for: type instance Foo Y = X</p
+ ></td
></tr
><tr
><td colspan="2"
@@ -1260,8 +1286,10 @@
> <a href="#" class="selflink"
>#</a
></td
- ><td class="doc empty"
- ></td
+ ><td class="doc"
+ ><p
+ >Doc for: type instance Foo X = Y</p
+ ></td
></tr
><tr
><td colspan="2"
@@ -1574,7 +1602,9 @@
>AssocD</a
> <a href="#" title="TypeFamilies"
>Y</a
- > :: * <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Kind"
+ >Type</a
+ > <a href="#" class="selflink"
>#</a
></p
><p class="src"
@@ -1584,7 +1614,9 @@
>AssocT</a
> <a href="#" title="TypeFamilies"
>Y</a
- > :: * <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Kind"
+ >Type</a
+ > <a href="#" class="selflink"
>#</a
></p
></div
@@ -1628,7 +1660,9 @@
>AssocD</a
> <a href="#" title="TypeFamilies"
>X</a
- > :: * <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Kind"
+ >Type</a
+ > <a href="#" class="selflink"
>#</a
></p
><p class="src"
@@ -1638,7 +1672,9 @@
>AssocT</a
> <a href="#" title="TypeFamilies"
>X</a
- > :: * <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Kind"
+ >Type</a
+ > <a href="#" class="selflink"
>#</a
></p
></div
@@ -1762,7 +1798,9 @@
>Y</a
> <a href="#" title="TypeFamilies"
>&lt;&gt;</a
- > (a :: *)</span
+ > (a :: <a href="#" title="Data.Kind"
+ >Type</a
+ >)</span
> <a href="#" class="selflink"
>#</a
></td
@@ -1785,7 +1823,9 @@
>Y</a
> <a href="#" title="TypeFamilies"
>&lt;&gt;</a
- > (a :: *) = a</div
+ > (a :: <a href="#" title="Data.Kind"
+ >Type</a
+ >) = a</div
></details
></td
></tr
@@ -1800,7 +1840,9 @@
>X</a
> <a href="#" title="TypeFamilies"
>&lt;&gt;</a
- > (a :: *)</span
+ > (a :: <a href="#" title="Data.Kind"
+ >Type</a
+ >)</span
> <a href="#" class="selflink"
>#</a
></td
@@ -1823,7 +1865,9 @@
>X</a
> <a href="#" title="TypeFamilies"
>&lt;&gt;</a
- > (a :: *) = <a href="#" title="TypeFamilies"
+ > (a :: <a href="#" title="Data.Kind"
+ >Type</a
+ >) = <a href="#" title="TypeFamilies"
>X</a
></div
></details
diff --git a/html-test/ref/TypeFamilies2.html b/html-test/ref/TypeFamilies2.html
index a5d0d9a9..1b4eed8c 100644
--- a/html-test/ref/TypeFamilies2.html
+++ b/html-test/ref/TypeFamilies2.html
@@ -142,8 +142,10 @@
> <a href="#" class="selflink"
>#</a
></td
- ><td class="doc empty"
- ></td
+ ><td class="doc"
+ ><p
+ >Should be visible, but with a hidden right hand side</p
+ ></td
></tr
><tr
><td colspan="2"
@@ -202,8 +204,10 @@
> <a href="#" class="selflink"
>#</a
></td
- ><td class="doc empty"
- ></td
+ ><td class="doc"
+ ><p
+ >Should be visible, but with a hidden right hand side</p
+ ></td
></tr
><tr
><td colspan="2"
@@ -240,8 +244,10 @@
> <a href="#" class="selflink"
>#</a
></td
- ><td class="doc empty"
- ></td
+ ><td class="doc"
+ ><p
+ >External instance</p
+ ></td
></tr
><tr
><td colspan="2"
diff --git a/html-test/ref/Unicode.html b/html-test/ref/Unicode.html
index 3cae7357..26d0d60e 100644
--- a/html-test/ref/Unicode.html
+++ b/html-test/ref/Unicode.html
@@ -46,7 +46,9 @@
><li class="src short"
><a href="#"
>x</a
- > :: Int</li
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ ></li
></ul
></details
></div
@@ -57,7 +59,9 @@
><p class="src"
><a id="v:x" class="def"
>x</a
- > :: Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
><div class="doc"
diff --git a/html-test/ref/Unicode2.html b/html-test/ref/Unicode2.html
new file mode 100644
index 00000000..bf667bae
--- /dev/null
+++ b/html-test/ref/Unicode2.html
@@ -0,0 +1,100 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+><head
+ ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"
+ /><title
+ >Unicode2</title
+ ><link href="#" rel="stylesheet" type="text/css" title="Ocean"
+ /><link rel="stylesheet" type="text/css" href="#"
+ /><script src="haddock-bundle.min.js" async="async" type="text/javascript"
+ ></script
+ ><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+ ></script
+ ></head
+ ><body
+ ><div id="package-header"
+ ><ul class="links" id="page-menu"
+ ><li
+ ><a href="#"
+ >Contents</a
+ ></li
+ ><li
+ ><a href="#"
+ >Index</a
+ ></li
+ ></ul
+ ><p class="caption empty"
+ ></p
+ ></div
+ ><div id="content"
+ ><div id="module-header"
+ ><table class="info"
+ ><tr
+ ><th
+ >Safe Haskell</th
+ ><td
+ >Safe</td
+ ></tr
+ ></table
+ ><p class="caption"
+ >Unicode2</p
+ ></div
+ ><div id="synopsis"
+ ><details id="syn"
+ ><summary
+ >Synopsis</summary
+ ><ul class="details-toggle" data-details-id="syn"
+ ><li class="src short"
+ ><a href="#"
+ >&#252;</a
+ > :: ()</li
+ ></ul
+ ></details
+ ></div
+ ><div id="interface"
+ ><h1
+ >Documentation</h1
+ ><div class="top"
+ ><p class="src"
+ ><a id="v:-252-" class="def"
+ >&#252;</a
+ > :: () <a href="#" class="selflink"
+ >#</a
+ ></p
+ ><div class="doc"
+ ><p
+ >All of the following work with a unicode character &#252;:</p
+ ><ul
+ ><li
+ >an italicized <em
+ >&#252;</em
+ ></li
+ ><li
+ >inline code <code
+ >&#252;</code
+ ></li
+ ><li
+ >a code block:</li
+ ></ul
+ ><pre
+ >&#252;</pre
+ ><ul
+ ><li
+ >a url <a href="#"
+ >https://www.google.com/search?q=&#252;</a
+ ></li
+ ><li
+ >a link to <code
+ ><a href="#" title="Unicode2"
+ >&#252;</a
+ ></code
+ ></li
+ ></ul
+ ></div
+ ></div
+ ></div
+ ></div
+ ><div id="footer"
+ ></div
+ ></body
+ ></html
+> \ No newline at end of file
diff --git a/html-test/ref/Visible.html b/html-test/ref/Visible.html
index 22c6be6c..308689e4 100644
--- a/html-test/ref/Visible.html
+++ b/html-test/ref/Visible.html
@@ -45,7 +45,11 @@
><p class="src"
><a id="v:visible" class="def"
>visible</a
- > :: Int -&gt; Int <a href="#" class="selflink"
+ > :: <a href="#" title="Data.Int"
+ >Int</a
+ > -&gt; <a href="#" title="Data.Int"
+ >Int</a
+ > <a href="#" class="selflink"
>#</a
></p
></div
diff --git a/html-test/src/Bug745.hs b/html-test/src/Bug745.hs
new file mode 100644
index 00000000..f26562c1
--- /dev/null
+++ b/html-test/src/Bug745.hs
@@ -0,0 +1,8 @@
+{-# LANGUAGE TemplateHaskell, QuasiQuotes #-}
+
+module Bug574 where
+-- See https://github.com/haskell/haddock/issues/574
+
+-- | Somthing with a spliced type
+foo :: Int -> $(let i = [t| Int |] in [t| $i -> $i |])
+foo x y = x + y
diff --git a/html-test/src/ConstructorArgs.hs b/html-test/src/ConstructorArgs.hs
new file mode 100644
index 00000000..6b0da711
--- /dev/null
+++ b/html-test/src/ConstructorArgs.hs
@@ -0,0 +1,56 @@
+{-# LANGUAGE GADTs, PatternSynonyms #-}
+
+module ConstructorArgs (Foo(..), Boo(Foo, Foa, Fo, Fo'), pattern Bo, pattern Bo') where
+
+data Foo
+ = Rec -- ^ doc on a record
+ { x :: String -- ^ doc on the `String` field of `Rec`
+ , y :: String -- ^ doc on the `String` field of `Rec`
+ }
+ | Baz Int String -- ^ old prefix doc style
+ | Boa -- ^ doc on the `Boa` constrictor
+ !Int -- ^ doc on the `Int` field of `Boa`
+ !String -- ^ doc on the `String` field of `Boa`
+ | Int :| String -- ^ old infix doc style
+ | Int -- ^ doc on the `Int` field of the `:*` constructor
+ :* -- ^ doc on the `:*` constructor
+ String -- ^ doc on the `String` field of the `:*` constructor
+
+infixr 1 `Foo`
+infixr 2 `Boa`
+infixr 3 :*
+
+data Boo where
+ -- | Info about a 'Foo'
+ Foo :: Int -- ^ `Int` field of `Foo`
+ -> String -- ^ `String` field of `Foo`
+ -> Boo -- ^ Make a `Boo`
+
+ -- | no argument docs GADT
+ Foa :: Int -> Boo
+
+infixr 4 `Boo`
+
+-- | Info about bundled 'Fo'
+pattern Fo :: Int -- ^ an 'Int'
+ -> String -- ^ a 'String'
+ -> Boo -- ^ a 'Boo'
+pattern Fo x y = Foo x y
+
+-- | Bundled and no argument docs
+pattern Fo' :: Boo
+pattern Fo' = Foo 1 "hi"
+
+infixr 5 `Fo`
+
+-- | Info about not-bundled 'Bo'
+pattern Bo :: Int -- ^ an 'Int'
+ -> String -- ^ a 'String'
+ -> Boo -- ^ a 'Boo' pattern
+pattern Bo x y = Foo x y
+
+-- | Not bunded and no argument docs
+pattern Bo' :: Int -> String -> Boo
+pattern Bo' x y = Foo x y
+
+infixr 6 `Bo`
diff --git a/html-test/src/GadtConstructorArgs.hs b/html-test/src/GadtConstructorArgs.hs
new file mode 100644
index 00000000..79ffb4d3
--- /dev/null
+++ b/html-test/src/GadtConstructorArgs.hs
@@ -0,0 +1,13 @@
+{-# LANGUAGE GADTs, PatternSynonyms #-}
+
+module GadtConstructorArgs (Boo(..)) where
+
+data Boo where
+ Fot :: { x :: Int -- ^ an 'x'
+ , y :: Int -- ^ a 'y'
+ } -> Boo
+
+ -- | Record GADT with docs
+ Fob :: { w :: Int -- ^ a 'w'
+ , z :: Int -- ^ a 'z'
+ } -> Boo -- ^ a 'Boo'
diff --git a/html-test/src/QuantifiedConstraints.hs b/html-test/src/QuantifiedConstraints.hs
new file mode 100644
index 00000000..82dd81e5
--- /dev/null
+++ b/html-test/src/QuantifiedConstraints.hs
@@ -0,0 +1,11 @@
+{-# LANGUAGE QuantifiedConstraints #-}
+module QuantifiedConstraints where
+
+class Foo a where
+ fooed :: a
+
+needsParensAroundContext :: (forall x. Foo (f x)) => f Int
+needsParensAroundContext = fooed
+
+needsNoParensAroundContext :: Foo (f Int) => f Int
+needsNoParensAroundContext = fooed
diff --git a/html-test/src/Unicode2.hs b/html-test/src/Unicode2.hs
new file mode 100644
index 00000000..ca6b18ba
--- /dev/null
+++ b/html-test/src/Unicode2.hs
@@ -0,0 +1,18 @@
+module Unicode2 where
+
+-- | All of the following work with a unicode character ü:
+--
+-- * an italicized /ü/
+--
+-- * inline code @ü@
+--
+-- * a code block:
+--
+-- > ü
+--
+-- * a url <https://www.google.com/search?q=ü>
+--
+-- * a link to 'ü'
+--
+ü :: ()
+ü = ()
diff --git a/latex-test/ref/ConstructorArgs/ConstructorArgs.tex b/latex-test/ref/ConstructorArgs/ConstructorArgs.tex
new file mode 100644
index 00000000..44304f47
--- /dev/null
+++ b/latex-test/ref/ConstructorArgs/ConstructorArgs.tex
@@ -0,0 +1,69 @@
+\haddockmoduleheading{ConstructorArgs}
+\label{module:ConstructorArgs}
+\haddockbeginheader
+{\haddockverb\begin{verbatim}
+module ConstructorArgs (
+ Foo((:|), Rec, Baz, Boa, (:*), x, y), Boo(Foo, Foa, Fo, Fo'), pattern Bo,
+ pattern Bo'
+ ) where\end{verbatim}}
+\haddockendheader
+
+\begin{haddockdesc}
+\item[\begin{tabular}{@{}l}
+data\ Foo
+\end{tabular}]\haddockbegindoc
+\enspace \emph{Constructors}\par
+\haddockbeginconstrs
+\haddockdecltt{=} & \haddockdecltt{Rec} & doc on a record \\
+ & \haddocktt{\qquad \{} \haddockdecltt{x :: String} & doc on the \haddockid{String} field of \haddockid{Rec} \\
+ & \haddocktt{\qquad ,} \haddockdecltt{y :: String} & doc on the \haddockid{String} field of \haddockid{Rec} \\ & \haddocktt{\qquad \}} \\
+\haddockdecltt{|} & \haddockdecltt{Baz Int String} & old prefix doc style \\
+\haddockdecltt{|} & \haddockdecltt{Boa} & doc on the \haddockid{Boa} constrictor \\
+ & \qquad \haddockdecltt{!Int} & doc on the \haddockid{Int} field of \haddockid{Boa} \\
+ & \qquad \haddockdecltt{!String} & doc on the \haddockid{String} field of \haddockid{Boa} \\
+\haddockdecltt{|} & \haddockdecltt{Int :| String} & old infix doc style \\
+\haddockdecltt{|} & \haddockdecltt{(:*)} & doc on the \haddockid{:*} constructor \\
+ & \qquad \haddockdecltt{Int} & doc on the \haddockid{Int} field of the \haddockid{:*} constructor \\
+ & \qquad \haddockdecltt{String} & doc on the \haddockid{String} field of the \haddockid{:*} constructor \\
+\end{tabulary}\par
+\end{haddockdesc}
+\begin{haddockdesc}
+\item[\begin{tabular}{@{}l}
+data\ Boo\ where
+\end{tabular}]\haddockbegindoc
+\enspace \emph{Constructors}\par
+\haddockbeginconstrs
+& \haddockdecltt{Foo} & Info about a \haddockid{Foo} \\
+ & \qquad \haddockdecltt{::} \enspace \haddockdecltt{Int} & \haddockid{Int} field of \haddockid{Foo} \\
+ & \qquad \haddockdecltt{->} \enspace \haddockdecltt{String} & \haddockid{String} field of \haddockid{Foo} \\
+ & \qquad \haddockdecltt{->} \enspace \haddockdecltt{Boo} & Make a \haddockid{Boo} \\
+& \haddockdecltt{Foa :: Int -> Boo} & no argument docs GADT \\
+\end{tabulary}\par
+\enspace \emph{Bundled Patterns}\par
+\haddockbeginconstrs
+& \haddockdecltt{pattern Fo} & Info about bundled \haddockid{Fo} \\
+ & \qquad \haddockdecltt{::} \enspace \haddockdecltt{Int} & an \haddockid{Int} \\
+ & \qquad \haddockdecltt{->} \enspace \haddockdecltt{String} & a \haddockid{String} \\
+ & \qquad \haddockdecltt{->} \enspace \haddockdecltt{Boo} & a \haddockid{Boo} \\
+& \haddockdecltt{pattern Fo' :: Boo} & Bundled and no argument docs \\
+\end{tabulary}\par
+\end{haddockdesc}
+\begin{haddockdesc}
+\item[\begin{tabular}{@{}l}
+pattern\ Bo
+\end{tabular}]\haddockbegindoc
+\haddockbeginargs
+\haddockdecltt{::} & \haddockdecltt{Int} & an \haddockid{Int} \\
+\haddockdecltt{->} & \haddockdecltt{String} & a \haddockid{String} \\
+\haddockdecltt{->} & \haddockdecltt{Boo} & a \haddockid{Boo} pattern \\
+\end{tabulary}\par
+Info about not-bundled \haddockid{Bo}\par
+
+\end{haddockdesc}
+\begin{haddockdesc}
+\item[\begin{tabular}{@{}l}
+pattern\ Bo'\ ::\ Int\ ->\ String\ ->\ Boo
+\end{tabular}]\haddockbegindoc
+Not bunded and no argument docs\par
+
+\end{haddockdesc} \ No newline at end of file
diff --git a/latex-test/ref/ConstructorArgs/haddock.sty b/latex-test/ref/ConstructorArgs/haddock.sty
new file mode 100644
index 00000000..6e031a98
--- /dev/null
+++ b/latex-test/ref/ConstructorArgs/haddock.sty
@@ -0,0 +1,57 @@
+% Default Haddock style definitions. To use your own style, invoke
+% Haddock with the option --latex-style=mystyle.
+
+\usepackage{tabulary} % see below
+
+% make hyperlinks in the PDF, and add an expandabale index
+\usepackage[pdftex,bookmarks=true]{hyperref}
+
+\newenvironment{haddocktitle}
+ {\begin{center}\bgroup\large\bfseries}
+ {\egroup\end{center}}
+\newenvironment{haddockprologue}{\vspace{1in}}{}
+
+\newcommand{\haddockmoduleheading}[1]{\chapter{\texttt{#1}}}
+
+\newcommand{\haddockbeginheader}{\hrulefill}
+\newcommand{\haddockendheader}{\noindent\hrulefill}
+
+% a little gap before the ``Methods'' header
+\newcommand{\haddockpremethods}{\vspace{2ex}}
+
+% inserted before \\begin{verbatim}
+\newcommand{\haddockverb}{\small}
+
+% an identifier: add an index entry
+\newcommand{\haddockid}[1]{\haddocktt{#1}\index{#1@\texttt{#1}}}
+
+% The tabulary environment lets us have a column that takes up ``the
+% rest of the space''. Unfortunately it doesn't allow
+% the \end{tabulary} to be in the expansion of a macro, it must appear
+% literally in the document text, so Haddock inserts
+% the \end{tabulary} itself.
+\newcommand{\haddockbeginconstrs}{\begin{tabulary}{\linewidth}{@{}llJ@{}}}
+\newcommand{\haddockbeginargs}{\begin{tabulary}{\linewidth}{@{}llJ@{}}}
+
+\newcommand{\haddocktt}[1]{{\small \texttt{#1}}}
+\newcommand{\haddockdecltt}[1]{{\small\bfseries \texttt{#1}}}
+
+\makeatletter
+\newenvironment{haddockdesc}
+ {\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\haddocklabel}}
+ {\endlist}
+\newcommand*\haddocklabel[1]{\hspace\labelsep\haddockdecltt{#1}}
+\makeatother
+
+% after a declaration, start a new line for the documentation.
+% Otherwise, the documentation starts right after the declaration,
+% because we're using the list environment and the declaration is the
+% ``label''. I tried making this newline part of the label, but
+% couldn't get that to work reliably (the space seemed to stretch
+% sometimes).
+\newcommand{\haddockbegindoc}{\hfill\\[1ex]}
+
+% spacing between paragraphs and no \parindent looks better
+\parskip=10pt plus2pt minus2pt
+\setlength{\parindent}{0cm}
diff --git a/latex-test/ref/ConstructorArgs/main.tex b/latex-test/ref/ConstructorArgs/main.tex
new file mode 100644
index 00000000..80f639c5
--- /dev/null
+++ b/latex-test/ref/ConstructorArgs/main.tex
@@ -0,0 +1,11 @@
+\documentclass{book}
+\usepackage{haddock}
+\begin{document}
+\begin{titlepage}
+\begin{haddocktitle}
+
+\end{haddocktitle}
+\end{titlepage}
+\tableofcontents
+\input{ConstructorArgs}
+\end{document} \ No newline at end of file
diff --git a/latex-test/ref/GadtConstructorArgs/GadtConstructorArgs.tex b/latex-test/ref/GadtConstructorArgs/GadtConstructorArgs.tex
new file mode 100644
index 00000000..7aaf5512
--- /dev/null
+++ b/latex-test/ref/GadtConstructorArgs/GadtConstructorArgs.tex
@@ -0,0 +1,25 @@
+\haddockmoduleheading{GadtConstructorArgs}
+\label{module:GadtConstructorArgs}
+\haddockbeginheader
+{\haddockverb\begin{verbatim}
+module GadtConstructorArgs (
+ Boo(Fot, Fob, x, y, w, z)
+ ) where\end{verbatim}}
+\haddockendheader
+
+\begin{haddockdesc}
+\item[\begin{tabular}{@{}l}
+data\ Boo\ where
+\end{tabular}]\haddockbegindoc
+\enspace \emph{Constructors}\par
+\haddockbeginconstrs
+& \haddockdecltt{Fot} & \\
+ & \qquad \haddockdecltt{:: \{} \enspace \haddockdecltt{x :: Int} & an \haddockid{x} \\
+ & \qquad \haddockdecltt{\ \ \ \ ,} \enspace \haddockdecltt{y :: Int} & a \haddockid{y} \\
+ & \qquad \haddockdecltt{\ \ \ \ \} ->} \enspace \haddockdecltt{Boo} & \\
+& \haddockdecltt{Fob} & Record GADT with docs \\
+ & \qquad \haddockdecltt{:: \{} \enspace \haddockdecltt{w :: Int} & a \haddockid{w} \\
+ & \qquad \haddockdecltt{\ \ \ \ ,} \enspace \haddockdecltt{z :: Int} & a \haddockid{z} \\
+ & \qquad \haddockdecltt{\ \ \ \ \} ->} \enspace \haddockdecltt{Boo} & a \haddockid{Boo} \\
+\end{tabulary}\par
+\end{haddockdesc} \ No newline at end of file
diff --git a/latex-test/ref/GadtConstructorArgs/haddock.sty b/latex-test/ref/GadtConstructorArgs/haddock.sty
new file mode 100644
index 00000000..6e031a98
--- /dev/null
+++ b/latex-test/ref/GadtConstructorArgs/haddock.sty
@@ -0,0 +1,57 @@
+% Default Haddock style definitions. To use your own style, invoke
+% Haddock with the option --latex-style=mystyle.
+
+\usepackage{tabulary} % see below
+
+% make hyperlinks in the PDF, and add an expandabale index
+\usepackage[pdftex,bookmarks=true]{hyperref}
+
+\newenvironment{haddocktitle}
+ {\begin{center}\bgroup\large\bfseries}
+ {\egroup\end{center}}
+\newenvironment{haddockprologue}{\vspace{1in}}{}
+
+\newcommand{\haddockmoduleheading}[1]{\chapter{\texttt{#1}}}
+
+\newcommand{\haddockbeginheader}{\hrulefill}
+\newcommand{\haddockendheader}{\noindent\hrulefill}
+
+% a little gap before the ``Methods'' header
+\newcommand{\haddockpremethods}{\vspace{2ex}}
+
+% inserted before \\begin{verbatim}
+\newcommand{\haddockverb}{\small}
+
+% an identifier: add an index entry
+\newcommand{\haddockid}[1]{\haddocktt{#1}\index{#1@\texttt{#1}}}
+
+% The tabulary environment lets us have a column that takes up ``the
+% rest of the space''. Unfortunately it doesn't allow
+% the \end{tabulary} to be in the expansion of a macro, it must appear
+% literally in the document text, so Haddock inserts
+% the \end{tabulary} itself.
+\newcommand{\haddockbeginconstrs}{\begin{tabulary}{\linewidth}{@{}llJ@{}}}
+\newcommand{\haddockbeginargs}{\begin{tabulary}{\linewidth}{@{}llJ@{}}}
+
+\newcommand{\haddocktt}[1]{{\small \texttt{#1}}}
+\newcommand{\haddockdecltt}[1]{{\small\bfseries \texttt{#1}}}
+
+\makeatletter
+\newenvironment{haddockdesc}
+ {\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\haddocklabel}}
+ {\endlist}
+\newcommand*\haddocklabel[1]{\hspace\labelsep\haddockdecltt{#1}}
+\makeatother
+
+% after a declaration, start a new line for the documentation.
+% Otherwise, the documentation starts right after the declaration,
+% because we're using the list environment and the declaration is the
+% ``label''. I tried making this newline part of the label, but
+% couldn't get that to work reliably (the space seemed to stretch
+% sometimes).
+\newcommand{\haddockbegindoc}{\hfill\\[1ex]}
+
+% spacing between paragraphs and no \parindent looks better
+\parskip=10pt plus2pt minus2pt
+\setlength{\parindent}{0cm}
diff --git a/latex-test/ref/GadtConstructorArgs/main.tex b/latex-test/ref/GadtConstructorArgs/main.tex
new file mode 100644
index 00000000..dc1a1aa3
--- /dev/null
+++ b/latex-test/ref/GadtConstructorArgs/main.tex
@@ -0,0 +1,11 @@
+\documentclass{book}
+\usepackage{haddock}
+\begin{document}
+\begin{titlepage}
+\begin{haddocktitle}
+
+\end{haddocktitle}
+\end{titlepage}
+\tableofcontents
+\input{GadtConstructorArgs}
+\end{document} \ No newline at end of file
diff --git a/latex-test/src/ConstructorArgs/ConstructorArgs.hs b/latex-test/src/ConstructorArgs/ConstructorArgs.hs
new file mode 100644
index 00000000..6b0da711
--- /dev/null
+++ b/latex-test/src/ConstructorArgs/ConstructorArgs.hs
@@ -0,0 +1,56 @@
+{-# LANGUAGE GADTs, PatternSynonyms #-}
+
+module ConstructorArgs (Foo(..), Boo(Foo, Foa, Fo, Fo'), pattern Bo, pattern Bo') where
+
+data Foo
+ = Rec -- ^ doc on a record
+ { x :: String -- ^ doc on the `String` field of `Rec`
+ , y :: String -- ^ doc on the `String` field of `Rec`
+ }
+ | Baz Int String -- ^ old prefix doc style
+ | Boa -- ^ doc on the `Boa` constrictor
+ !Int -- ^ doc on the `Int` field of `Boa`
+ !String -- ^ doc on the `String` field of `Boa`
+ | Int :| String -- ^ old infix doc style
+ | Int -- ^ doc on the `Int` field of the `:*` constructor
+ :* -- ^ doc on the `:*` constructor
+ String -- ^ doc on the `String` field of the `:*` constructor
+
+infixr 1 `Foo`
+infixr 2 `Boa`
+infixr 3 :*
+
+data Boo where
+ -- | Info about a 'Foo'
+ Foo :: Int -- ^ `Int` field of `Foo`
+ -> String -- ^ `String` field of `Foo`
+ -> Boo -- ^ Make a `Boo`
+
+ -- | no argument docs GADT
+ Foa :: Int -> Boo
+
+infixr 4 `Boo`
+
+-- | Info about bundled 'Fo'
+pattern Fo :: Int -- ^ an 'Int'
+ -> String -- ^ a 'String'
+ -> Boo -- ^ a 'Boo'
+pattern Fo x y = Foo x y
+
+-- | Bundled and no argument docs
+pattern Fo' :: Boo
+pattern Fo' = Foo 1 "hi"
+
+infixr 5 `Fo`
+
+-- | Info about not-bundled 'Bo'
+pattern Bo :: Int -- ^ an 'Int'
+ -> String -- ^ a 'String'
+ -> Boo -- ^ a 'Boo' pattern
+pattern Bo x y = Foo x y
+
+-- | Not bunded and no argument docs
+pattern Bo' :: Int -> String -> Boo
+pattern Bo' x y = Foo x y
+
+infixr 6 `Bo`
diff --git a/latex-test/src/GadtConstructorArgs/GadtConstructorArgs.hs b/latex-test/src/GadtConstructorArgs/GadtConstructorArgs.hs
new file mode 100644
index 00000000..79ffb4d3
--- /dev/null
+++ b/latex-test/src/GadtConstructorArgs/GadtConstructorArgs.hs
@@ -0,0 +1,13 @@
+{-# LANGUAGE GADTs, PatternSynonyms #-}
+
+module GadtConstructorArgs (Boo(..)) where
+
+data Boo where
+ Fot :: { x :: Int -- ^ an 'x'
+ , y :: Int -- ^ a 'y'
+ } -> Boo
+
+ -- | Record GADT with docs
+ Fob :: { w :: Int -- ^ a 'w'
+ , z :: Int -- ^ a 'z'
+ } -> Boo -- ^ a 'Boo'