3.5. Invoking GHCi
Prev | Chapter 3. Using GHCi | Next

## 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, “GHCi commands”). 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, Using GHC) 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

Most packages (see Section 4.8.1, “Using Packages ”) are available without needing to specify any extra flags at all: they will be automatically loaded the first time they are needed.

For non-auto packages, however, you need to request the package be loaded by using the `-package` flag:

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

    Loading package base ... linking ... done.
    Loading package readline-1.0 ... linking ... done.
    Prelude>

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 `-l`lib`` option. (The term library here refers to libraries of foreign object code; for using libraries of Haskell source code, see Section 3.2.1, “Modules vs. filenames”.) For example, to load the “m” library:

    $ ghci -lm

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

- Paths specified using the `-L`path`` command-line option,

- the standard library search path for your system, which on some systems may be overridden by setting the `LD_LIBRARY_PATH` environment variable.

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.

Ordering of `-l` options matters: a library should be mentioned before the libraries it depends on (see Section 4.10.7, “Options affecting linking”).

Prev | Up | Next
3.4. Interactive evaluation at the prompt | Home | 3.6. GHCi commands