How can I view the definition of a function in Haskell/GHCi?

franco hades picture franco hades · Apr 26, 2011 · Viewed 18.9k times · Source

I'm using Haskell 2010.1.0.0.1 with GHC 6. Typing :t at the GHCi prompt followed by the name of a function shows us the type of the function. Is there a way to view the function definition as well?

Answer

Don Stewart picture Don Stewart · Apr 26, 2011

Not currently.

The closest command to what you want is :info

:info name ...

Displays information about the given name(s). For example, if name is a class, then the class methods and their types will be printed; if name is a type constructor, then its definition will be printed; if name is a function, then its type will be printed. If name has been loaded from a source file, then GHCi will also display the location of its definition in the source.

For types and classes, GHCi also summarises instances that mention them. To avoid showing irrelevant information, an instance is shown only if (a) its head mentions name, and (b) all the other things mentioned in the instance are in scope (either qualified or otherwise) as a result of a :load or :module commands.

like so:

Prelude> :info ($)
($) :: (a -> b) -> a -> b   -- Defined in GHC.Base
infixr 0 $

You can though, see the source for identifiers generated by the haddock tool, on Hackage.

  1. Look up the module on Hackage
  2. Click on the source link

Note that "?src" is a valid command in lambdabot, on the #haskell IRC channel, and does what you'd expect.

> ?src ($)
> f $ x = f x