A documentation-generation tool for Haskell libraries http://www.haskell.org/haddock/

Version on this page:2.17.4
LTS Haskell 9.21:2.17.4
Stackage Nightly 2017-07-25:2.17.4
Latest on Hackage:2.21.0

See all snapshots haddock appears in

BSD3 licensed by Simon Marlow, David Waern
Maintained by Alec Theriault, Alex Biehl, Simon Hengel, Mateusz Kowalczyk

Module documentation for 2.17.4

There are no documented modules for this package.

Haddock, a Haskell Documentation Tool Build Status

About haddock

See Description on Hackage.

Source code documentation

Full documentation can be found in the doc/ subdirectory, in reStructedText format format.

Project overview

This project consists of three packages:

  • haddock
  • haddock-api
  • haddock-library


The haddock package provides the haddock executable. It is implemented as a tiny wrapper around haddock-api’s Documentation.Haddock.haddock function.


haddock-api contains the program logic of the haddock tool. The haddocks for the Documentation.Haddock module offer a good overview of haddock-api’s functionality.


haddock-library is concerned with the parsing and processing of the Haddock markup language.


Please create issues when you have any problems and pull requests if you have some code.


To get started you’ll need a latest GHC release installed.

Clone the repository:

  git clone https://github.com/haskell/haddock.git
  cd haddock

and then proceed using your favourite build tool.

Using cabal new-build

cabal new-build -w ghc-8.6.1
# build & run the test suite
cabal new-test -w ghc-8.6.1 all

Using Cabal sandboxes

cabal sandbox init
cabal sandbox add-source haddock-library
cabal sandbox add-source haddock-api
cabal sandbox add-source haddock-test
# adjust -j to the number of cores you want to use
cabal install -j4 --dependencies-only --enable-tests
cabal configure --enable-tests
cabal build -j4
# run the test suite
export HADDOCK_PATH="dist/build/haddock/haddock"
cabal test

Using Stack

stack init
stack install
# run the test suite
export HADDOCK_PATH="$HOME/.local/bin/haddock"
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. See instructions at https://ghc.haskell.org/trac/ghc/wiki/WorkingConventions/Git/Submodules for an example workflow.

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


Changes in version 2.21.0

  • Overhaul handling of data declarations in XHTML and LaTeX. Adds support for documenting individual arguments of constructors/patterns (#709)

  • Actually list all fixities for --hoogle (#871)

  • Fix broken instance source links (#869)

  • Avoiding line breaks due to ling line in the output of --hoogle (#868)

  • Capture docs on type family instances (#867)

Changes in version 2.20.0

  • Show where instances are defined (#748)

  • @since includes package name (#452, #550, #749)

Changes in version

  • Support for linking unicode operators (#458)

  • Hyperlinker: Fix file handle leak in (#763)

Changes in version 2.19.0

  • Haddock now supports tables in documentation inspired by reSTs grid tables

  • --quickjump allows for quick navigation in documentation on hackage and other documentation hosting sites.

  • A –reexport flag, which can be used to add extra modules to the top-level module tree

  • Haddock no longer reports coverage statistics for hidden modules. By default cabal-install marks all package internal modules as hidden.

  • Haddock now writes additional information about the documentation to meta.json

  • Fix renaming of type variables after specializing instance method signatures (#613)

  • Move markup related data types to haddock-library

  • Fix: Show empty constraint contexts in pattern type signatures (#663)

  • Fix: Generate constraint signatures for constructors exported as pattern synonyms (#663)

  • The hyperlinker backend now uses the GHC lexer instead of a custom one. This notably fixes rendering of quasiquotes.

  • Overhaul Haddock’s rendering of kind signatures so that invisible kind parameters are not printed (#681) (Fixes #544)

  • Recognise SPDX-License-Identifier as alias for License in module header parser (#743)

  • Remove the response file related utilities, and use the ones that come with base (Trac #13896)

  • Remove the response file related utilities, and use the ones that come with base (Trac #13896)

Changes in version 2.18.1

  • Synopsis is working again (#599)

  • Per-argument documentation on class methods working again (#647)

  • Support user defined signatures on pattern synonyms

  • Support for bundled pattern synonyms (#494, #551, #626)

Changes in version 2.17.4

  • Fix ‘internal error: links: UnhelpfulSpan’ (#554, #565)

  • Hyperlink backend knows about DataKinds (#510)

  • Fix rendering of class methods for Eq and Ord (#549)

  • Export MDoc and toInstalledIface from Haddock.Types

Changes in version

  • Disable NFData instances for GHC types when GHC >= 8.0.2 (#537)

Changes in version 2.17.3

  • Remove framed view of the HTML documentation

Changes in version 2.17.2

  • Fix portability of documentation building within GHC

Changes in version 2.17.1

  • Included with GHC 8.0.1

  • Fixed Makefile for GHC installation

  • Fixed clean rule of GHC Makefile

Changes in version 2.17.0 (not released)

  • Support typesetting of mathematical expressions via Mathjax (#397)

  • Describe orphan instances defined in a module in its documentation (#449)

  • Produce specialized type signatures for typeclass methods (#425)

  • Support GCC-like response files (#470)

Changes in version 2.16.2

  • Generate hyperlinked source ourselves (#410, part of GSOC 2015)

  • Fix expansion icon for user-collapsible sections (#412)

  • Break up response file arguments on newlines

  • Various HTML fixes (#301, #406, #407, #421)

  • Line anchors in hyperlinked source (#420)

Changes in version 2.16.1

  • Don’t default to type constructors for out-of-scope names (#253 and #375)

  • Fix Hoogle display of constructors (#361)

  • Fully qualify names in Hoogle instances output (#263)

  • Output method documentation in Hoogle backend (#259)

  • Don’t print instance safety information in Hoogle (#168)

  • Expand response files in arguments (#285)

  • Build the main executable with -threaded (#399)

  • Use SrcSpan of declarations for inferred type sigs (#207)

  • Fix cross-module instance locations (#383)

  • Fix alignment of Source link for instances in Firefox (#384)

Changes in version 2.16.0

  • Experimental collapsible header support (#335)

  • Add support for markdown links and images

  • Allow an optional colon after the closing bracket of definition lists. This is to disambiguate them from markdown links and will be require with a future release.

  • Fix re-exports of built-in type families (#310)

  • Fix parsing of infix identifiers such as elem.

  • Print missing docs by default and add –no-print-missing-docs

  • parser: now parses out some meta data too, breaking the API

  • parser: markdown syntax for images and URLs is now accepted: <> style for images and style for links is now considered deprecated. for links is still OK.

  • parser: add support for @since element: this is paragraph-level element of the form ‘@since x.y.z’ where x.y.z is the version number. The way it is rendered is subject to change.

  • properly render package ID (not package key) in index (#329)

  • links to source location of class instance definitions

  • Fix code blocks in presence of Windows line endings

  • Deal better with long synopsis lines (#151)

Changes in version 2.15.0

  • Always read in prologue files as UTF8 (#286 and Cabal #1721)

  • parser: don’t wrap headers in DocParagraph (#307)

  • parser: don’t mangle append order for nested lists (pandoc #1346)

  • parser: preserve list ordering in certain scenarios (#313)

  • parser: update the attoparsec version used internally giving slight parsing performance boost.

  • Move development to be against latest GHC release and not GHC HEAD.

  • Further split up the package to separate the executable from the library, necessary by things like GHCJS. We now have ‘haddock-library’ which are the parts that don’t use GHC API, ‘haddock-api’ which are (some of) the parts that do use GHC API and ‘haddock’ which merely provides the executable.

  • Export few extra functions in the API.

  • Add compatibility with GHC 7.8.2.

  • Omit unnecessary ‘forall’s (#315 and #86)

  • Remove some files which were really old or did not belong in the repository in the first place.

Changes in version 2.14.3

  • Fix parsing of identifiers with ^ or ⋆ in them (#298)

  • Fix anchors (#308)

Changes in version 2.14.2

  • Always drop –split-objs GHC flag for performance reasons (#292)

  • Print kind signatures GADTs (#85)

  • Drop single leading whitespace when reasonable from @-style blocks (#201)

  • Fix crashes associated with exporting data family record selectors (#294)

Changes in version 2.14.1

  • Render * and -> with their UnicodeSyntax equivalents if -U is enabled

  • Display minimal complete definitions for type classes

  • Hide right hand side of TF instances with hidden names on the RHS

Changes in version 2.14.0

  • Print entities with missing documentation (#258)

  • Print a warning message when given -optghc instead of --optghc (#5)

  • Add --compatible-interface-versions (#231)

  • Allow to generate latex documentation for FFI declarations (#247)

  • Add copyright and license information to generated documentation

  • Improved to Unicode support

  • Bold markup support

  • Nested paragraphs

  • Better escaping

  • Header markup

  • Parser should no longer fail to parse any markup

  • {-# OPTIONS_HADDOCK show-extensions #-} pragma will show the GHC extensions enabled in the module.

  • Properly render License field (#271)

  • Print type/data family instances (for exported types only)

  • Fix display of poly-kinded type operators (#189)

  • PatternSynonyms support

  • Fix display of implicit parameters (#260)

  • Fix rendering of Contents when links are present (#276)

  • Fix documentation duplication on record fields (#195)

  • Add --source-entity-line for exact line links (eg. things defined inside TH splices) (#79)

  • Display fixity information for names with nonstandard fixities

  • Bird tracks specified like “> code” no longer suffer from an extra leading space in the code output

Changes in version 2.13.2

  • Handle HsExplicitListTy in renamer (#213)

  • Allow haddock markup in deprecation messages

  • Export more types from Documentation.Haddock

  • Include everything that is required to run the test suite with the cabal package (#230)

Changes in version 2.13.1

  • Hide instances that are “internal” to a module

  • Add support for properties in documentation

  • Fix a bug with spurious superclass constraints

  • Fix and extend the Haddock API

Changes in version 2.12.0

  • Labeled URLs (e.g <http://example.net/ some label>)

  • Improved memory usage (new dependency: deepseq)

Changes in version 2.11.0

  • Show deprecation messages for identifiers

  • List identifiers declared on the same line (with a common type) separately

  • Don’t crash on unicode strings in doc comments

  • Fix reporting of modules safe haskell mode

  • Fix a case where we were generating invalid xhtml

  • Improved –qual option (no crashes, proper error messages)

  • A new –qual option “aliased” which qualifies identifiers by the module alias used in the source code

  • The Haddock API restores GHC’s static flags after invocation

  • Access to unexported identifiers through the Haddock API again

Changes in version 2.10.0

  • Require GHC >= 7.4

  • Safe Haskell indications on module pages

  • Type declarations on identifiers no longer necessary

  • Add flag –interface-version

  • Warn when comment refers to in-scope identifier without documentation

  • Bug fix: links to out-of-scope things (#78)

  • Bug fix: module references to other packages work again

Changes in version 2.9.4

  • Require GHC >= 7.2

  • Support Alex 3.x

Changes in version 2.9.3

[This is the version that comes with GHC 7.2.1 although it claims it’s 2.9.2!]

  • Build with GHC 7.2.1

  • Support blank lines in results of examples

  • A type signature for multiple names generates one signature in the output

  • Minor bug fixes

Changes in version 2.9.2

  • Build with GHC 7.0.2

  • Write Hoogle output in utf8; fixes GHC build on Windows

Changes in version 2.9.1

  • Fix build in GHC tree

  • Improve .cabal file

Changes in version 2.9.0

  • Drop support for ghc < 7

  • New flag –qual for qualification of names

  • Print doc coverage information to stdout when generating docs

  • Include an ‘All’ option in the A-Z subdivided index

  • Make TOC group header identifiers validate

  • Minor changes to the API

Changes in the version that comes with GHC 7.0.1

[This version claims it is 2.8.0 but is actually based on 2.8.1]

  • Fix URL creation on Windows: Use / not \ in URLs.

  • Support GHC 7.0

Changes in version 2.8.1

  • Fix build on Windows with MinGW

Changes in version 2.8.0

  • HTML backend completely rewritten to generate semantically rich XHTML using the xhtml package.

  • New default CSS based on the color scheme chosen for the new Haskell wiki, with a pull-out tab for the synopsis.

  • Theme engine based on CSS files. Themes can be switched from the header menu. (New flags –built-in-themes and –theme. The latter is an alias for –css which now has extended semantics).

  • Markup support for executable examples/unit-tests. To be used with an upcoming version of the DocTest program.

  • Addition of a LaTeX backend.

  • Frames-mode can be enabled from the header menu.

  • Path to source entities can be specified per package, so that source links work for cross-package documentation.

  • Support for a second form of enumerated lists (1. 2. etc).

  • Additions and changes to the Haddock API.

  • New flag –no-tmp-comp-dir to tell Haddock to write and pick up compilation files (.o, .hi, etc) to/from GHC’s output directory instead of a temporary directory.

  • Various bug fixes.

Changes in version 2.6.1 (bug fix release from the stable branch)

  • Fix #128

Changes in version 2.7.2

  • Add Paths_haddock to library

Changes in version 2.7.1:

  • Fix problems with library part of .cabal file

Changes in version 2.7.0:

  • Instances can be commented

  • The Haddock API now exposes more of the internals of Haddock

  • Bug fixes (most importantly #128)

Changes in version 2.6.0:

  • Drop support for GHC 6.10.*

  • Add support for GHC 6.12.1

  • Cross-package documentation: full documentation show up when re-exporting things coming from external packages

  • Lexing and parsing the Haddock comment markup is now done in Haddock again, instead of in GHC

  • Slightly prettier printing of instance heads

  • Support platforms for which GHC has no native code generator

  • Add a flag –print-ghc-libdir

  • Minor bug fixes

Changed in version 2.5.0:

  • Drop support for GHC 6.8.*

  • Add support for GHC 6.10.3 and 6.10.4

  • Revert to the old multi-page index for large packages (#106)

  • Show GADT records in the generated documentation

  • Create output directory if it doesn’t exist (#104)

  • Use the native codegen instead of compiling via C for TH modules

  • Add –use-unicode flag for displaying prettier versions of common symbols

  • Multiple verbosity levels: remove –verbose and add –verbosity=n

Changed in version 2.4.2:

  • Support GHC 6.10.2

  • Haddock no longer crashes on Template Haskell modules (#68) (only with GHC 6.10.2 or above)

  • Fix problem with Template Haskell-generated declarations disappearing (#59)

  • Generate two anchors for each link for compatibility between IE and Opera (#45)

  • Improved error messages

  • Show re-exports from external packages again (GHC ticket #2746)

  • Store hidden modules in .haddock files again (needed by the haddock library)

  • Avoid processing boot modules

  • Pragmas may exist between document comments and declarations

  • Do not indicate that a constructor argument is unboxed

  • Fix problem with non-working links to ghc-prim

  • Allow referring to a specific section within a module in a module link (#65)

  • Fixes to the Hoogle backend

  • Improvements to the haddock library

  • Many other fixes (including #67, #69, #58, #57)

Changed in version 2.4.1:

  • Depend on base 4.* when GHC >= 6.9, otherwise 3.*

Changed in version 2.4.0:

  • Add framed view of the HTML documentation

  • Build with GHC 6.8.2 and 6.8.3 again

  • Support images in documentation comments again

  • Small improvements to the Hoogle output

  • A few bugs has been fixed

Changed in version 2.3.0:

  • Support for GHC 6.10.1

  • Slightly improved space usage

  • Fix a bug that made hidden modules show up in the contents & index pages

  • Fix a bug that made Haddock load modules twice

  • Improvements to the Hoogle output

Changed in version 2.2.2:

  • Relax version dependency on ghc-paths

Changes in version 2.2.1:

  • Support for GHC 6.8.3

  • The Hoogle backend is back, thanks to Neil Mitchell. The plan is to be compatible with the upcoming Hoogle 4 pre-release

  • Show associated types in the documentation for class declarations

  • Show type family declarations

  • Show type equality predicates

  • Major bug fixes (#1 and #44)

  • It is no longer required to specify the path to GHC’s lib dir

  • Remove unnecessary parenthesis in type signatures

Changes in version 2.1.0:

  • Fix a bug that made links point to the defining module instead of the “best” one (e.g Int pointing to GHC.Base instead of Data.Int)

  • Fix a couple of smaller bugs

  • The representation of DocName was changed in the library

  • Add a flag –no-warnings for turning off warnings

Changes in version

  • The GHC API is used as the front-end

  • Haddock now understands all syntax understood by GHC 6.8.2

  • Haddock can generate documentation for some of the language extensions in GHC 6.8.2

  • Format of module attributes has changed. The only way of specifying module attributes is via a new OPTIONS_HADDOCK pragma. Example: {-# OPTIONS_HADDOCK hide, prune #-}

  • Haddock understands literate source files

  • Add a small library to read Haddock’s interface files

  • Add a flag -B for passing the path to the GHC lib dir

  • Add a flag –optghc for passing options to GHC

  • Add a flag –ghc-version for printing the GHC version

  • Remove –use-package, –allow-missing-html, –ghc-pkg, in favour of only supporting –read-interface

  • Remove –package flag, the GHC flag -package-name can be used instead

  • Remove –no-implicit-prelude flag, the GHC flag -XNoImplicitPrelude can be used instead

Changes in version 0.9:

  • Infix type operators, e.g., first :: a~>a’ -> (a,b)~>(a’,b)

  • Add a search box to the index page which automatically narrows the index to the search as you type (thanks to Neil Mitchell).

  • Add a –ghc-pkg flag

  • Add a flag –allow-missing-html

  • URL expansion for %%, %L, %{LINE}

  • added substitution %{FILE///c}

  • Lexing of /…/ is now more like ‘…’, in that a / character must be matched by another / character on the same line, otherwise it is treated as a literal ‘/’. This removes a common source of accidental parse errors in documentation.

  • Various bugs were fixed.

  • Cabal 1.2 is now required, and Haddock builds with GHC 6.8.x.

Changes in version 0.8:

  • Haddock has a Cabal build system, and will build on Windows without Cygwin or MSYS. GHC 6.4 or later is required.

  • New options: –comments-base, –comments-module, –comments-entity for generating links to pages (eg. wiki) for collecting user comments.

  • New options: –source-base, –source-module, –source-entity for generating links to source code. Haddock now understands {-# LINE #-} pragmas, which means it can figure out the correct name for the source file even if the file is preprocessed.

  • Haddock generates output for populating the Hoogle search engine.

  • New markup <> for including images.

Changes in version 0.7:

  • Changes in the way Haddock decides where to direct hyperlinks. Each entity

    is now assigned a single “home” module, and all hyperlinks are directed to that module. See the docs (“Hyperlinking and re-exported entities”) for details.

  • New options –ignore-all-exports, –hide

  • New option –use-package for creating documentation that hyperlinks to the HTML documentation for existing packages on your system. It works by querying ghc-pkg for the location of the Haddock interface and HTML for the given package.

  • Parts of the HTML documentation, notably lists of instances, are now “collapsible” with a +/- button. Also, the contents page is now in the form of tree in which subtrees can be collapsed.

  • Support for Microsoft DevHelp and HtmlHelp 2.0 formats.

  • Support for a short description for each module for the contents page.

  • Compiles with GHC 6.4+

  • Various bugfixes

Changes in version 0.6:

  • Implicit parameters, zip comprehensions and ‘mdo’ are now supported by the parser.

  • Some lexical bugs were fixed, mainly concerning literal paragraphs next to non-literal paragraphs.

  • New options: –gen-index, –use-index, –gen-contents and –use-contents, for generting a combined index and contents for several libraries from the appropriate .haddock files.

  • There is now one index rather than separate Function/Constructor and Type/Class indices. Where a name refers to several entities, these are listed separately in the index.

  • New option: -v, elicits more verbose warnings. Some warnings are now turned off by default; Haddock should be a little less noisy in general.

  • Markup for definition lists has been added. See the documentation for details.

  • New option: –package for setting the package name. The package is listed alongside each module name in the combined contents.

  • Entities which are re-exported from another package now at least leave a hyperlink in the generated HTML, rather than nothing at all.

  • Some fixes for bugs which caused incorrect hyperlinks in the generated HTML. In particular, instances should now be linked correctly.

  • Some aesthetic improvements to the generated HTML.

Changes in version 0.5:

  • Compiles with recent versions of GHC.

  • A few bugs have been fixed.

  • New labelling/linking feature (see “Anchors” in the manual).

Changes in version 0.4:

  • Import declarations which list entities in parentheses, or with hiding clauses, are now properly supported. Modulo one or two small infelicities, the full Haskell modules system is now supported.

  • Haddock is now more flexible about the placing of separators (commas, semicolons) in relation to doc comments.

  • There is support for generating and reading “interface files” which describe the exports of a set of modules. This is useful for generating documentation which hyperlinks to previously-generated documentation.

  • Support for generating the extra files required by the Microsoft Help compiler.

  • New option: –prologue specifies a file of documentation which is placed on the contents page.

  • Many bugs fixed

Changes in version 0.3:

  • Documentation on individual function arguments is now implemented

  • Links can be made to identifiers that aren’t in scope, by using the fully qualified name.

  • Instances are collected and listed with the appropriate classes and datatypes (not for derived instances yet).

  • Single quotes are only interpreted specially when they surround a legal Haskell identifier, otherwise they are treated literally.

  • Bird-tracked text is now literal. If you want marked-up text in a code block, use the @…@ notation instead.

  • Various changes to the layout, it generally looks nicer now.

  • Various bugs fixed.

Changes in version 0.2:

  • The […] markup for typewriter font has been changed to @…@.

  • Module attributes introduced (see the documentation for details).

  • {- … -} style comments may now be used for documentation annotations

  • Recursive modules are detected and reported as an error.

  • Existential constructors and rank-N types are now groked by the parser

  • Some type rendering cleaned up

  • `abc’ is accepted as well as ‘abc’ to markup an identifier

  • Several bugs fixed, and error messages improved.

Depends on 2 packages:
Used by 3 packages:
comments powered byDisqus