Hoogle 4 vs Hoogle 5

Hoogle 5 is at https://hoogle.haskell.org/ and on Hackage, so will be obtained by cabal install hoogle. It searches Stackage and is updated daily. It has weaker type search, with various tickets to improve that.

Other stuff (somewhat outdated)

This page describes how Hoogle 5 might work, and has not yet been fully implemented.

Hoogle is a Haskell API search engine, which allows you to search many standard Haskell libraries by either function name, or by approximate type signature. To experiment, visit the online version at http://haskell.org/hoogle.

Command Line UI

Chrome Integration

As a keyword search: With a keyword search you can type h map directly into the location bar to perform a Hoogle search. Go to the Hoogle website in Chrome, right-click in the Hoogle search field and select “Add as a search engine…”. Give it a keyword such as “h”.

Firefox Integration

From the search bar: Go to the Hoogle website in Firefox and click on the drop-down arrow at the left of the search bar, and select the “Add Hoogle” option. Click the arrow again to select Hoogle as your search engine.

As a keyword search: With a keyword search you can type h map directly into the location bar to perform a Hoogle search. Go to the Hoogle website in Firefox, right-click in the Hoogle search field and select “Add a Keyword for this Search…”. Given it a keyword such as “h”.

If you want to search for special symbols in Firefox keyword search, modify the keyword search URL to be: javascript:window.location.href="http://haskell.org/hoogle?q=" + encodeURIComponent("%s")

Firefox Ubiquity Integration

Ubiquity provides a graphical command-line for Firefox. To install the Ubiquity Hoogle command, visit the this page and click “Subscribe…” when asked whether you want to install it. Further information is available here.

Others

The Source Code

Contributions are most welcome. Hoogle is written in Haskell 98 + Heirarchical Modules, I do not wish to change this. Other than that, I’m pretty flexible about most aspects of Hoogle. The [http://code.google.com/p/ndmitchell/issues/list bug tracker] has many outstanding tasks, but please contact me if you have thoughts on doing something major to Hoogle, so I can give some advice.

Background

Hoogle work is licensed under the GPL version 2.0. Any patches are assumed to be dual licensed under the BSD license and the GPL, to allow re-licensing Hoogle under the BSD license in future, if that proves beneficial to the Haskell community. The work is intended to be helpful, open and free. If the license doesn’t meet your needs then talk to me.

Theoretical Foundations

A lot of related work was done by Rittri [1] and Runciman [2] in the late 80’s. Since then Di Cosmo [3] has produced a book on type isomorphisms. Unfortunately the implementations that accompanied the earlier works were for functional languages that have since become less popular.

In previous versions, all the data was taken from Zvon’s Haskell Guide. Thanks to their open and friendly policy of allowing the data to be reused, this project became possible. More recent versions use the Hierarchical Libraries as distributed with GHC, and databases generated by Haddock.

Interesting links

Changes

Changelog for Hoogle (* = breaking change)

5.0.17.5, released 2019-01-27* #285, remove accidental API break in 5.0.17.4 Lots of improvements in type search5.0.17.4, released 2018-12-10* #285, change targetPackage/Module to be opaque Require haskell-src-exts-1.21 #271, added FromJSON instance for Target #253, adds JSON pagination from query parameters Make sure <h1> works well in doc snippets #251, make sure transformers is more popular than mtl Require network-uri >= 2.6, don't require network5.0.17.3, released 2018-04-17 Require extra-1.6.6 Fix the reported memory sizes5.0.17.2, released 2018-03-16 Remove support for GHC 7.10 Require conduit-1.3.0 #245, add support for GHC 8.45.0.17.1, released 2018-01-27 #238, only identify the database by the first three version components #236, in --local mode replace file:// links in Haddock pages5.0.17, released 2018-01-17 Add lower bounds for time and bytestring #234, allow http-conduit-0.155.0.16, released 2018-01-03 #232, allow haskell-src-exts-1.18-1.205.0.15, released 2017-12-12 Allow haskell-src-exts-1.205.0.14, released 2017-11-28 #228, add --datadir for overriding data directory on servers #223, don't break on foldl' #222, make sure all packages appear in the search5.0.13, released 2017-07-30 #219, treat the query "a->b" the same as "a -> b" #215, if a specified module/package is missing, give no results #220, start on port 8080 by default Rely on the fact ghc API is now on Hackage #217, fix the mode tag propagating to child links5.0.12, released 2017-05-06 #210, expose targetInfo and targetSearchDisplay5.0.11, released 2017-05-02 #209, add a defaultDatabaseLocation function5.0.10, released 2017-04-17 #205, change how the link URL is computed #206, put newer versions of a package first5.0.9, released 2017-01-16 #202, add --haddock functionality5.0.8, released 2016-12-29 #194, make --local work regardless of code page5.0.7, released 2016-12-27 #200, make sure the content-type is set properly5.0.6, released 2016-11-30 #196, make --local look for .cabal files as well Fix up Frege documentation generation5.0.5, released 2016-11-24 #193, support multiple --local flags #195, add --home flag to server mode Allow haskell-src-exts-1.195.0.4, released 2016-09-11 #184, use file URLs for local docs #183, make --local look for .txt files recursively5.0.3, released 2016-08-28 #181, use the proper network constraints Avoid deprecated Aeson modules5.0.2, released 2016-07-25 Move to haskell-src-exts-1.185.0.1, released 2016-07-12 #178, support the --link argument #178, add module names to results on the command line #177, require containers 0.5 or above5.0, released 2016-06-24 #172, make sure --local links work on Linux #116, store data files in getAppUserDataDirectory by default G472, be robust to corrupt Hoogle files G521, make sure it works with inverted color preferences Rewrite from scratch4.2.38, released 2015-01-28 #96, allow certicate verification failures #95, allow a higher version of Cabal on older GHCs4.2.37, released 2015-01-13 #94, GHC 7.10 support4.2.36, released 2014-10-12 #85, add support for missing type constructors4.2.35, released 2014-09-15 Allow haskell-src-exts-1.164.2.34, released 2014-07-09 Add defaultDatabaseLocation4.2.33, released 2014-06-15 Allow WAI-3.04.2.32, released 2014-04-14 Allow haskell-src-exts-1.154.2.31, released 2014-04-03 #61, support conduit-1.14.2.30, released 2014-03-23 #57, support QuickCheck-2.74.2.29, released 2014-02-23 #55, if reading as UTF8 fails, explicitly try Latin1 Add QuickCheck as a dependency Change createDatabase to also save the file Disable rank feature Remove running a hoogle query without converting the database Ignore packages without documentation to hoogle data4.2.28, released 2014-01-03 Upgrade to shake-0.11 #49, update "hoogle data" to be incremental4.2.27, released 2014-01-01 Rewrite how "hoogle data" works #45, if you are building all, also depend on default #47, switch to using Shake to build the recipes Add a dependency on Shake4.2.26, released 2013-12-10 Fix omission of the Test file4.2.25, released 2013-12-09 Fix timestamps in .tar.gz dist file4.2.24, released 2013-12-08 Allow WAI 2.0 Fix the Keyword generator4.2.23, released 2013-09-29 Improvements to Haddock conversion4.2.22, released 2013-09-29 Download Hoogle data from the old Hackage server4.2.21, released 2013-09-01 #25, make the tarball pass the tests #26, GHC 7.8 compatibility Ensure alias resolution is bottom-up and recursive4.2.20, released 2013-08-25 #619, do not depend on unix on Windows4.2.19, released 2013-08-20 Fix version bounds4.2.18, released 2013-08-20 Allow bytestring-0.94.2.17, released 2013-08-20 Upgrade to haskell-src-exts-1.14 Visual redesign Require bytestring-0.10 or above, due to NFData instances Add NFData instance to Database4.2.16, released 2013-02-21 Remove lots of explicit upper bounds4.2.15, released 2013-01-29 Allow http-types-0.8 Allow case-insensitive-1.0 Support --local for GHC docs #568, rewrite Haddock links in --local4.2.14, released 2012-11-06 Switch license from GPL to BSD3 GHC 7.6 fixes ##4, Allow Cabal-1.16.*4.2.13, released 2012-08-18 Allow cmdargs-0.10.*4.2.12, released 2012-07-15 Allow conduit-0.5, wai-1.3 and warp-1.3 Upgrade to http-types-0.7.* In embedded mode, don't hijack the URL bar or title Upgrade to jQuery 1.7.2 #89, add a format=json output mode #476, update the URL as you type Improve iPhone support Update the copyright year in the footer Double the speed of hoogle server responses4.2.11, released 2012-04-05 Allow transformers-0.3 Allow conduit-0.4, wai-1.2 and warp-1.2 Allow haskell-src-exts-1.12 and 1.134.2.10, released 2012-03-04 #533, be paranoid when parsing Cabal files4.2.9, released 2012-03-01 Upgrade to WAI-1.1 and Warp-1.1 #525, don't rely on a redirect to find files Allow Cabal-1.144.2.8, released 2011-11-27 Allow cmdargs-0.9 Fix setting the global read flags and unsetting them properly Allow case-insensitive-0.4.* Make data --local have a good default on Linux Make server --local work on Windows #407, rewrite OpenSearch plugin to work regardless of the server4.2.7, released 2011-09-03 Allow cmdargs-0.84.2.6, released 2011-08-12 Permit GHC 7.2 Allow case-insensitive-0.3.* Fix bug when searching for toString in the embed mode Make --redownload work on the tarballs4.2.5, released 2011-06-12 Fix hyperlinks to symbols (i.e. &&) in Haddock4.2.4, released 2011-05-26 #434, use either wget or curl to download the files Allow haskell-src-exts 1.11.* Upgrade to cmdargs==0.7.*4.2.3, released 2011-05-01 Generate database for ghc internals Give an error if the database is the wrong version Add -fno-cse, to make cmdargs work (was losing args annotations)4.2.2, released 2011-04-25 Upgrade to WAI==0.4.* and Warp==0.4.* Allow parsec 3, since various people have reported it works Default module URL's correctly when not on Hackage #417, use proper Haddock parsing for package descriptions Make sure https: links work through the web mode Rewrite the binary defer layer, cleaner and slightly faster Eliminate escaping problems when entering "'s in the search Some work on #375, add links to the library page Add --template to override the templates at runtime Add --dynamic flag to server mode, include update stamps Upgrade wai and warp, adds an exception handler #82, rewrite showing document snippets, better expand/collapse Support <em> tags in Haddock output (as well as <i>) Make package matching case insensitive #372, add features to improve module name search Make module name searching case insensitive4.2.1, released 2011-01-26 Fix for pattern match failure when searching for "to" Fix for not sending text/html when serving local files Eliminate the --nostdin flag, now unnecessary Change to use WAI/Warp instead of HTTP and custom server Fix a bug, didn't ever show Waiting... on the real website Make embed work in IE84.2, released 2011-01-23 Make the CGI interface send the right number of newlines Accept prefix and suffix web parameters Eliminate isBlankQuery, make Query a Monoid Make Query abstract, add queryPackages/querySetPackage Rename querySuggestions/queryCompletions by dropping the query Add mode=embed support Add some log analysis features Ignore some whitespace in the input file Work around a cabal bug, include jquery.cookie.js Add ?version=xxx to .css and .js, to make it auto refresh4.1.5, released 2011-01-16 #399, rehabilitate mode=suggest Stop mode=suggest failing entirely, now cleanly gives no answers Combine --web and --webmode Complete the command line flag help #327, ensure utf8 is found #187, ensure LT is found Use the Hoogle tarball direct from Hackage #54, rework packages, entries and keywords #87, make all database files lowercase Various javascript/ajax enhancements4.1.4, released 2011-01-15 Running data on Posix sets all files to global read/execute Relax haskell-src-exts to allow 1.10.1 Rework the web page display further4.1.3, released 2011-01-09 Read and write all database files in UTF8 #391, add tar -xzf when extracting from the tarball Change search results display, packages/modules on separate line Exclude haskellN* from the platform, they are in base Add --nostdin to server mode, to support running with nohup Loosen dependencies for tagsoup (typo'd it before)4.1.2, released 2010-12-19 Loosen dependencies for tagsoup and HTTP (but not parsec) Avoid self circular dependencies4.1.1, released 2010-12-18 #195, include all the necessary resources to run as a server When in server mode, be more robust to errors4.1, released 2010-12-18 #320, make sure system is found #146, preserve forall's in everywhere #186, switch to using haskell-src-exts to parse input files #249, make sure you find MonadWriter #235, make sure you find forall #309, make sure there are links for keywords #78, add --link flag #59, operators look nicer, and have blue brackets round them #352, can now parse ( # ) as a function name in the input #280, searching for "~ +keyword" should find keyword #116, fix links for types/classes #83, all searching for package-name #94, allow textbases to be used automatically #92, short flags are now handled by cmdargs, so work #51, test mode now does what test and testfile did #66, turn Hoogle into a library Add --server flag, to run as a server4.0.7, released 2009-07-19 Start of changelog