A documentation-generation tool for Haskell libraries.
This is Haddock, a tool for automatically generating documentation from annotated Haskell source code. It is primary intended for documenting library interfaces, but it should be useful for any kind of Haskell code.
Haddock lets you write documentation annotations next to the definitions of functions and types in the source code, in a syntax that is easy on the eye when writing the source code (no heavyweight mark-up).
Haddock understands Haskell's module system, so you can structure your code however you like without worrying that internal structure will be exposed in the generated documentation. For example, it is common to implement a library in several modules, but define the external API by having a single module which re-exports parts of these implementation modules. Using Haddock, you can still write documentation annotations next to the actual definitions of the functions and types in the library, but the documentation annotations from the implementation will be propagated to the external API when the documentation is generated. Abstract types and classes are handled correctly. In fact, even without any documentation annotations, Haddock can generate useful documentation from your source code.
Haddock, a Haskell Documentation Tool
About haddock
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
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 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.
Hacking
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-head
# build & run the test suite
cabal new-test -w ghc-head 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 build
# run the test suite
export HADDOCK_PATH="$(stack exec which 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