Difference between revisions of "Hoogle"

From HaskellWiki
Jump to: navigation, search
(Hoogle Suggest)
(Bad Searches)
Line 70: Line 70:
 
* (a -> b) -> ([a] -> [b]) -- should find map
 
* (a -> b) -> ([a] -> [b]) -- should find map
 
* @hoogle Data.IntMap.IntMap a -> [a] -- badly kills the module names
 
* @hoogle Data.IntMap.IntMap a -> [a] -- badly kills the module names
  +
* @hoogle -- , gives copyright message (consequence of argument parsing in command line)
   
 
=== Higher Kinds ===
 
=== Higher Kinds ===

Revision as of 15:04, 30 January 2006


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