Hoogle

From HaskellWiki
Revision as of 15:14, 3 February 2006 by Vincenz (talk | contribs)
Jump to navigation Jump to search


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

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

     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 -}