Hoogle

From HaskellWiki
Revision as of 15:15, 3 February 2006 by Vincenz (talk | contribs)
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

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