\begin{hcarentry}{Haddock}
\label{haddock}
\report{David Waern}%11/08
\status{experimental, maintained}
\makeheader

Haddock is a widely used documentation-generation tool for Haskell
library code.  Haddock generates documentation by parsing and typechecking
Haskell source code directly and including documentation supplied by the
programmer in the form of specially-formatted comments in the source code
itself.  Haddock has direct support in Cabal~\cref{cabal}, and is used to
generate the documentation for the hierarchical libraries that come with GHC,
Hugs, and nhc98
(\url{http://www.haskell.org/ghc/docs/latest/html/libraries}) as well as
the documentation on Hackage~\cref{Hackage}.

The latest release is version 2.8.1, released September 3 2010.

\Separate
Recent changes:
\begin{itemize}

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

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

\item 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).

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

\item Addition of a LaTeX backend.

\item Frames-mode can be enabled from the header menu.

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

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

\item Additions and changes to the Haddock API.

\item 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.

\item Various bug fixes.

\end{itemize}

\FuturePlans
Although Haddock understands many GHC language extensions, we'd like it to
understand all of them. Currently there are som constructs you can't comment,
like GADTs and associated type synonyms.
\\ 
Error messages is an area with room for improvement. We'd like Haddock
to include accurate line numbers in markup syntax errors.
\\
On the HTML rendering side we want make more use of Javascript in order to make
the viewing experience better. The frames-mode could be improved this way, for
example.
\\
Finally, the long term plan is to split Haddock into one program that creates
data from sources, and separate backend programs that use that data via the
Haddock API. This will scale better, not requiring adding new backends to Haddock
for every tool that needs its own format.
\FurtherReading
\begin{compactitem}
\item Haddock's homepage:
\url{http://www.haskell.org/haddock/}

\item Haddock's developer Wiki and Trac:
\url{http://trac.haskell.org/haddock}

\item Haddock's mailing list:
\url{haddock@projects.haskell.org}
\end{compactitem}
\end{hcarentry}
