Hoogle
Jump to navigation
Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
To use hoogle go to http://haskell.org/hoogle. Hoogle is a Haskell API search engine, written by Neil Mitchell. It allows you to search by either name, or by approximate type signature.
How to use Hoogle
- The web interface: http://haskell.org/hoogle
- The Lambdabot plugin, @hoogle and @hoogle+
- Download the source with Darcs (where did i put it again?)
- Download a command line version (yet to be released, but get the source and compile it yourself)
- A Mac OS X version (unreleased yet, but it does exist)
Examples
If you wanted to search for the standard prelude function map, you could type into the search any one of:
(a -> b) -> [a] -> [b] (a -> a) -> [a] -> [a] (Int -> Bool) -> [Int] -> [Bool] [a] -> (a -> b) -> [b]
Todo
Admin
- Write a website build script
- get XHoogle in the repo
Short Term
i.e. before Hoogle3 goes public
- Fix parse errors, ) ->, ) ->@ , func :: With Type
- Regression tests for hoogle
- You cannot search for certain keywords, i.e. @, because it is not a recognised lex symbol
- Add comment characters, --, {- and -} to the list of symbols.
- Put back more detailed information about the Prelude functions, see LibraryDocumentation.
Medium Term
- Parameterise out by package, i.e. split off OpenGL
- Compile with Yhc and distribute
- Write GTK front end
- Firefox/Mozilla plugin
- Multiword search? power set
- Dehack the Score program
- Multiparameter type classes
Long Term
- Integration with Cabal
- Integration with http://darcs.augustsson.net/Darcs/Djinn
Hoogle Suggest
- People often type to, instead of ->
- Numeric literals
- Concepts? tuple, random, monads etc.
- Wrongly suggests capitals for t1 etc.
- Kind errors, Maybe -> Bool, suggest Maybe a -> Bool
Bad Searches
- (a -> b) -> ([a] -> [b]) -- should find map
- @hoogle Data.IntMap.IntMap a -> [a] -- badly kills the module names
- @hoogle -- , gives copyright message (consequence of argument parsing in command line)
Higher Kinds
The following searches are all wrong because Hoogle doesn't understand higher kinds, i.e. Monad's.
- Functor f => (a -> b) -> f a -> f b -- should find fmap
- Monad m => [m a] -> m [a] -- should find sequence
- (Monad m) => m (m a) -> m a -- should find join
Problems
While trying to run hihoo.pl on the NewBinary library, I received the following problems
*** can't parse data or newtype declaration: data MBA Variances [] RecFlag NonRecursive Generics: no {- abstract -} *** can't parse data or newtype declaration: data Bin a Variances [(False, False)] RecFlag NonRecursive Generics: no {- abstract -} *** can't parse data declaration: data BinHandle Variances [] RecFlag NonRecursive Generics: no = BinMem NewBinary.FastMutInt.FastMutInt{1} NewBinary.FastMutInt.FastMutInt{1} (GHC.IOBase.IORef BinArray) NewBinary.FastMutInt.FastMutInt{1} NewBinary.FastMutInt.FastMutInt{1} Stricts: ! ! ! ! ! Fields: off_r sz_r arr_r bit_off_r bit_cache_r | BinIO NewBinary.FastMutInt.FastMutInt{1} GHC.IOBase.Handle NewBinary.FastMutInt.FastMutInt{1} NewBinary.FastMutInt.FastMutInt{1} Stricts: ! ! ! ! Fields: off_r hdl bit_off_r bit_cache_r *** can't parse data or newtype declaration: data FastMutInt Variances [] RecFlag NonRecursive Generics: no {- abstract -}