cabal-hoogle

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.