@hackage cabal-hoogle0.1.0.0

generate hoogle database for cabal project and dependencies

cabal-hoogle

GitHub Action Badge

Like stack hoogle, but works for cabal projects. Generates hoogle database of your local packages and all dependencies.

Installation

Compiling from source requires a minimum GHC version of 8.10. Having cabal-hoogle installed, you may use it on a wider range of GHC, as long as the Cabal used to build cabal-hoogle and cabal-install match.

Step 1, run cabal update to make sure you are using the latest hackage index

Step 2, check the Cabal library version used by your cabal

cabal --version

It shows my cabal is using 3.6.3.0 of Cabal library. cabal-hoogle requires at least Cabal 3.2. Update it before continue.

cabal-install version 3.6.2.0
compiled using version 3.6.3.0 of the Cabal library 

Step 3, use cabal install to install cabal-hoogle from Hackage, specifying the Cabal library version you fetched above.

cabal install --constraint="Cabal == 3.6.3.0" cabal-hoogle

Usage

Prerequisite

Install Hoogle

Make sure hoogle is installed in your $PATH. You can do this by running cabal install hoogle

Enable Hoogle for Cabal

Make sure your ~/.cabal/config has the following entries. (DON'T remove existing entries!) Check the official docs if you don't know where is your cabal's global configuration file

documentation: True
haddock
  hoogle: True
  html: True

Or, run this command in bash:

cabal user-config update -a "documentation: True
haddock
  hoogle: True
  html: True"

Build Project with Cabal

Then, run cabal build all on your project, so that cabal will build haddock and hoogle files for your local packages and dependencies.

NOTE: Adding --enable-documentation --haddock-hoogle --haddock-html to your build command won't work for dependencies as I tried.

Generate

cabal-hoogle generate

This generates the hoogle database. You will see logs very similar to stack hoogle --rebuild

Run Hoogle

With cabal-hoogle run --, extra arguments are passed directly to hoogle.

You may start a server like this:

cabal-hoogle run -- server --local --port 9000

Or directly search in command line like this:

cabal-hoogle run -- search catMaybes

More Options

Run cabal-hoogle --help to see more options. For example if you are using a non-default build dir (not dist-newstyle), or you have multiple GHC verisons on the same project.

Below is a complex example:

cabal-hoogle --compiler ghc-9.2.3 --platform "x86_64-linux" --builddir mydist generate

FAQ

Many packages missing documentation

If you see output like this when running cabal-hoogle generate

Packages missing documentation: ansi-terminal ansi-wl-pprint async base-orphans base16-bytestring base64-bytestring Cabal cabal-hoogle clock colour extra hashable haskell-src-exts haskell-src-meta optparse-applicative primitive regex-base regex-tdfa safe split string-interpolate syb text-conversions th-abstraction th-compat th-expand-syns th-lift th-lift-instances th-orphans th-reify-many transformers-compat typed-process unliftio-core utf8-string vector vector-stream
Found 27 warnings when processing items

Probably you haven't built dependencies with hoogle enabled. Check prerequisites more carefully.

Cabal version mismatch

Make sure to build cabal-hoogle with the exact same Cabal library as your cabal-install. You can use cabal --version to check the version of Cabal library. See Installation.

Core libraries missing documentation

If you are on macOS or Windows, and using ghcup, your ghc probably doesn't come with docs. See this and this for details of the upstream issue.