3.5. Invoking GHCi

GHCi is invoked with the command ghci or ghc ––interactive. One or more modules or filenames can also be specified on the command line; this instructs GHCi to load the specified modules or filenames (and all the modules they depend on), just as if you had said :load modules at the GHCi prompt (see Section 3.6). For example, to start GHCi and load the program whose topmost module is in the file Main.hs, we could say:

$ ghci Main.hs

Most of the command-line options accepted by GHC (see Chapter 4) also make sense in interactive mode. The ones that don't make sense are mostly obvious; for example, GHCi doesn't generate interface files, so options related to interface file generation won't have any effect.

3.5.1. Packages

GHCi can make use of all the packages that come with GHC, For example, to start up GHCi with the network package loaded:

$ ghci -package network
   ___         ___ _
  / _ \ /\  /\/ __(_)
 / /_\// /_/ / /  | |      GHC Interactive, version 5.04, for Haskell 98.
/ /_\\/ __  / /___| |      http://www.haskell.org/ghc/
\____/\/ /_/\____/|_|      Type :? for help.

Loading package base ... linking ... done.
Loading package haskell98 ... linking ... done.
Loading package network ... linking ... done.

Note that GHCi will also automatically load any packages on which the requested package depends.

The following command works to load new packages into a running GHCi:

Prelude> :set -package name

But note that doing this will cause all currently loaded modules to be unloaded, and you'll be dumped back into the Prelude.

3.5.2. Extra libraries

Extra libraries may be specified on the command line using the normal -llib option. For example, to load the “m” library:

$ ghci -lm

On systems with .so-style shared libraries, the actual library loaded will the liblib.so. GHCi searches the following places for libraries, in this order:

On systems with .dll-style shared libraries, the actual library loaded will be lib.dll. Again, GHCi will signal an error if it can't find the library.

GHCi can also load plain object files (.o or .obj depending on your platform) from the command-line. Just add the name the object file to the command line.