Skip to content

Instantly share code, notes, and snippets.

@hardentoo
Forked from chrisdone/hoogle.md
Created May 29, 2018 09:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hardentoo/6f35b9d25fc713a69a9ce92c32e8db7d to your computer and use it in GitHub Desktop.
Save hardentoo/6f35b9d25fc713a69a9ce92c32e8db7d to your computer and use it in GitHub Desktop.
stack hoogle

Introducing the stack hoogle feature!

With the release of hoogle5, we can now hoogle all local packages.

This let us implement stack hoogle, which is on the master branch of stack, but is not yet on a stack release. We'd like you to try it out before we do!

To upgrade to the latest stack from git, use:

$ stack upgrade --git

Or just run stack install in your local copy of the stack repo, if you have one.

Now, in any stack project, run:

$ stack hoogle map

After a bunch of setup work (see below), you'll get something like

bash-3.2$ stack hoogle map
map :: (a -> b) -> [a] -> [b]
map :: (Word8 -> Word8) -> ByteString -> ByteString
[..]

Pass -i to show documentation:

bash-3.2$ stack hoogle -- -i map
map :: (a -> b) -> [a] -> [b]
base Prelude
map f xs is the list obtained by applying f
to each element of xs, i.e.,


map f [x1, x2, ..., xn] == [f x1, f x2, ..., f xn]
map f [x1, x2, ...] == [f x1, f x2, ...]

Each project has its own installation of hoogle:

bash-3.2$ stack exec which hoogle
/Users/chris/Work/hs-popen/.stack-work/install/x86_64-osx/lts-5.3/7.10.3/bin/hoogle

Unless you install it globally, in which case it'll use the one in your PATH if it's >=5.0. So if you get sick of it installing copies of hoogle, do stack install hoogle-5.0.

Please give it a try!


Addendum: automatic installation process

Hoogle5 is probably not installed on your system, so you'll see this message:

Hoogle isn't installed or is too old. Automatically installing (use --no-setup to disable) ...

Minimum version is hoogle-5.0. Found acceptable hoogle-5.0 in your index, installing it.

After installing Hoogle5 it'll say:

No Hoogle database yet. Automatically building haddocks and hoogle database (use --no-setup to disable) ...

Then it'll run stack haddock and then stack hoogle -- generate --local.

If you see a message like

Packages not found: abstract-par aeson aeson-compat [..]

Don't worry about it; stack only generates haddocks for the things you're using in your project, whereas hoogle is looking at everything in the snapshot database.

Relatedly, if you add a dependency to your project, run stack hoogle --rebuild, and that'll generate the haddocks and the hoogle database again.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment