I'm slowly working through the things I want for Hoogle 4, and its coming along quite nicely. A quick tour of the features I've already implemented:
Easier generation of Hoogle Databases
First create a Hoogle file using Haddock and Cabal:
> runhaskell Setup haddock --hoogle
Then convert it to a Hoogle binary database:
> hoogle /convert=base.txt
This will produce base.hoo, an optimised Hoogle database.
Faster text searches
Most searches are text searches, they used to linearly scan through the data, now they build a nice efficient index and hop directly to the relevant bit. This makes text searches over 100 times faster, and means they scale linearly with the number of results and the size of the text, rather than previously where they scaled with the size of the database.
As a result of having faster searches, I can now do multi-word searches, searching for two different words, and then matching between them. i.e. you can now search for "concat map" (or "map concat") and get concatMap returned.
There is now a proper Hoogle API, which the Hoogle command line tool and web tool call out to. This will hopefully people can layer new things on top of Hoogle more easily.
Multiple package searching
You can now search within multiple packages at a time. For example "drop +base +filepath" will search both the base and filepath modules, as though they were one.
Restricting on module name
As requested you can now restrict searches by module name, for example "Prelude.map" and "map +Prelude" will both do a search for the map function that resides in the Prelude.
The parser is written in parsec now, much more reliable! And also much better error messages, hopefully this should make it easier to extend Hoogle in the future as well.
I broke quite a lot with the complete revamp of the code, so the idea is to fix up what I broke and try and push a new release out relatively soon.