GHCi commands all begin with
‘:
’ and consist of a single command
name followed by zero or more parameters. The command name may be
abbreviated, with ambiguities being resolved in favour of the more
commonly used commands.
:add
module
...
Add module
(s) to the
current target set, and perform a
reload.
:browse
[*
]module
...
Displays the identifiers defined by the module
module
, which must be either
loaded into GHCi or be a member of a package. If the
*
symbol is placed before the module
name, then all the identifiers defined
in module
are shown; otherwise
the list is limited to the exports of
module
. The
*
-form is only available for modules
which are interpreted; for compiled modules (including
modules from packages) only the non-*
form of :browse
is available.
:cd
dir
Changes the current working directory to
dir
. A
‘˜
’ symbol at the
beginning of dir
will be replaced
by the contents of the environment variable
HOME
.
NOTE: changing directories causes all currently loaded modules to be unloaded. This is because the search path is usually expressed using relative directories, and changing the search path in the middle of a session is not supported.
:def
name
expr
The command :def
name
expr
defines a new GHCi command
:
,
implemented by the Haskell expression
name
expr
, which must have type
String -> IO String
. When
:
is typed at the
prompt, GHCi will run the expression
name
args
(
, take the
resulting name
args
)String
, and feed it back into
GHCi as a new sequence of commands. Separate commands in
the result must be separated by
‘\n
’.
That's all a little confusing, so here's a few examples. To start with, here's a new GHCi command which doesn't take any arguments or produce any results, it just outputs the current date & time:
Prelude> let date _ = Time.getClockTime >>= print >> return "" Prelude> :def date date Prelude> :date Fri Mar 23 15:16:40 GMT 2001
Here's an example of a command that takes an argument.
It's a re-implementation of :cd
:
Prelude> let mycd d = Directory.setCurrentDirectory d >> return "" Prelude> :def mycd mycd Prelude> :mycd ..
Or I could define a simple way to invoke
“ghc ––make Main
” in the
current directory:
Prelude> :def make (\_ -> return ":! ghc ––make Main")
We can define a command that reads GHCi input from a file. This might be useful for creating a set of bindings that we want to repeatedly load into the GHCi session:
Prelude> :def . readFile Prelude> :. cmds.ghci
Notice that we named the command
:.
, by analogy with the
‘.
’ Unix shell command that
does the same thing.
:edit [file
]
Opens an editor to edit the file
file
, or the most recently loaded
module if file
is omitted. The
editor to invoke is taken from the EDITOR
environment variable, or a default editor on your system if
EDITOR
is not set. You can change the
editor using :set editor
.
:help
,
:?
Displays a list of the available commands.
: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.
:load
module
...
Recursively loads the specified
module
s, and all the modules they
depend on. Here, each module
must be a module name or filename, but may not be the name
of a module in a package.
All previously loaded modules, except package modules,
are forgotten. The new set of modules is known as the
target set. Note that
:load
can be used without any arguments
to unload all the currently loaded modules and
bindings.
After a :load
command, the current
context is set to:
module
, if it was loaded
successfully, or
the most recently successfully loaded module, if
any other modules were loaded as a result of the current
:load
, or
Prelude
otherwise.
:main arg1
... argn
When a program is compiled and executed, it can use the
getArgs
function to access the
command-line arguments.
However, we cannot simply pass the arguments to the
main
function while we are testing in ghci,
as the main
function doesn't take its
directly.
Instead, we can use the :main
command.
This runs whatever main
is in scope, with
any arguments being treated the same as command-line arguments,
e.g.:
Prelude> let main = System.Environment.getArgs >>= print Prelude> :main foo bar ["foo","bar"]
:module [+|-] [*]mod1
... [*]modn
Sets or modifies the current context for statements typed at the prompt. See Section 3.4.3, “What's really in scope at the prompt?” for more details.
:quit
Quits GHCi. You can also quit by typing a control-D at the prompt.
:reload
Attempts to reload the current target set (see
:load
) if any of the modules in the set,
or any dependent module, has changed. Note that this may
entail loading new modules, or dropping modules which are no
longer indirectly required by the target.
:set
[option
...]
Sets various options. See Section 3.7, “The :set
command”
for a list of available options. The
:set
command by itself shows which
options are currently set.
:set
args
arg
...
Sets the list of arguments which are returned when the
program calls System.getArgs
.
:set
editor
cmd
Sets the command used by :edit
to
cmd
.
:set
prog
prog
Sets the string to be returned when the program calls
System.getProgName
.
:set
prompt
prompt
Sets the string to be used as the prompt in GHCi.
Inside prompt
, the sequence
%s
is replaced by the names of the
modules currently in scope, and %%
is
replaced by %
.
:show bindings
Show the bindings made at the prompt and their types.
:show modules
Show the list of modules currently load.
:ctags
[filename
]
:etags
[filename
]
Generates a “tags” file for Vi-style editors
(:ctags
) or Emacs-style editors (etags
). If
no filename is specified, the defaulit tags
or
TAGS
is
used, respectively. Tags for all the functions, constructors and
types in the currently loaded modules are created. All modules must
be interpreted for these commands to work.
See also Section 10.1, “Ctags and Etags for Haskell: hasktags”.
:type
expression
Infers and prints the type of
expression
, including explicit
forall quantifiers for polymorphic types. The monomorphism
restriction is not applied to the
expression during type inference.
:kind
type
Infers and prints the kind of
type
. The latter can be an arbitrary
type expression, including a partial application of a type constructor,
such as Either Int
.
:undef
name
Undefines the user-defined command
name
(see :def
above).
:unset
option
...
Unsets certain options. See Section 3.7, “The :set
command”
for a list of available options.
:!
command
...
Executes the shell command
command
.