0

Using :t I can print the type of an expression. But how do I see the constructors of that type? Also is there a shortcut for this in Haskell mode for emacs?

This seems like a basic thing, but I can't find it. Maybe I'm just searching the wrong terms...

In general, what is the easiest way to see the print the definition of a type without having to go to the documentation.

1 Answers1

5

:info, or just :i, is what you want:

>>> :i Either
data Either a b = Left a | Right b  -- Defined in ‘Data.Either’
... plus all of Either's instances

From the GHCi documentation:

: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.

Haskell-mode in Emacs has haskell-process-do-info (source), for which one Haskell on Emacs Tutorial recommends setting the keybinding C-c C-n C-i.

(defun haskell-process-do-info (&optional prompt-value) 
  "Print info on the identifier at point.
If PROMPT-VALUE is non-nil, request identifier via mini-buffer."
...
)
Micha Wiedenmann
  • 19,979
  • 21
  • 92
  • 137
MikaelF
  • 3,518
  • 4
  • 20
  • 33