Haddocks of multiple components — Haddock 1.0 documentation

# Haddocks of multiple components

Haddock supports building documentation of multiple components. First, one needs to build haddocks of all components which can be done with:

    cabal haddock --haddock-html \
                  --haddock-quickjump \
                  --haddock-option="--use-index=../doc-index.html" \
                  --haddock-option="--use-contents=../index.html" \
                  --haddock-option="--base-url=.." \
                  all

The new `--base-url` option will allow to access the static files from the main directory (in this example its the relative `./..` directory). It will also prevent `haddock` from copying its static files to each of the documentation folders, we’re only need a single copy of them where the `--base-url` option points to.

The second step requires to copy all the haddocks to a common directory, let’s say `./docs`, this will depend on your project and it might look like:

    cp -r dist-newstyle/build/x86_64-linux/ghc-9.0.1/package-a-0.1.0.0/doc/html/package-a/ docs
    cp -r dist-newstyle/build/x86_64-linux/ghc-9.0.1/package-b-0.1.0.0/doc/html/package-b/ docs

Note that you can also include documentation of other packages in this way, e.g. `base`, but you need to know where it is hidden on your hard-drive.

To build html and js (`quickjump`) indexes one can now invoke `haddock` with:

    haddock \
      -o docs \
      --quickjump --gen-index --gen-contents \
      --read-interface=package-a,docs/package-a/package-a.haddock \
      --read-interface=package-b,docs/package-b/package-b.haddock

Note: the `PATH` in `--read-interface=PATH,...` must be a relative url of a package it points to (relative to the `docs` directory).

There’s an example project which shows how to do that posted here, which haddocks are served on github-pages.