Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

haskell

ghci

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?

like image 268
franco hades Avatar asked Apr 26 '11 05:04

franco hades


People also ask

How are functions defined in Haskell?

Functions play a major role in Haskell, as it is a functional programming language. Like other languages, Haskell does have its own functional definition and declaration. Function declaration consists of the function name and its argument list along with its output.

What does Ghci mean in Haskell?

Introduction. GHCi is GHC's interactive environment, in which Haskell expressions can be interactively evaluated and programs can be interpreted.

How do I check my type in Haskell?

If you are using an interactive Haskell prompt (like GHCi) you can type :t <expression> and that will give you the type of an expression. e.g. or e.g.


3 Answers

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
like image 81
Don Stewart Avatar answered Sep 27 '22 07:09

Don Stewart


I don't think so. You can use :i for a little bit more information (more useful for infix operators and data constructions, etc.), but not the definition:

ghci> :i repeat
repeat :: a -> [a]       -- Defined in GHC.List

You can use hoogle to quickly find the documentation for a standard library function, which on the right has a link to go to the source. It's still a few clicks away though.

like image 42
luqui Avatar answered Sep 25 '22 07:09

luqui


Nope, can't do that. Some fun things you, the Haskell beginner, can do:

  • On the HTML haddock documents, click on "source"... study the source.
  • :browse to find all of the definitions exported by a module
  • Use :help for the obvious result
  • use the web interface of hoogle to search for functions, or install hoogle locally!
  • ?
  • Profit!
like image 34
Thomas M. DuBuisson Avatar answered Sep 25 '22 07:09

Thomas M. DuBuisson