By default, GHCi compiles Haskell source code into byte-code
that is interpreted by the runtime system. GHCi can also compile
Haskell code to object code: to turn on this feature, use the
-fobject-code flag either on the command line or
with :set (the option
-fbyte-code restores byte-code compilation
again). Compiling to object code takes longer, but typically the
code will execute 10-20 times faster than byte-code.
Compiling to object code inside GHCi is particularly useful
if you are developing a compiled application, because the
:reload command typically runs much faster than
restarting GHC with --make from the command-line,
because all the interface files are already cached in
memory.
There are disadvantages to compiling to object-code: you can't set breakpoints in object-code modules, for example. Only the exports of an object-code module will be visible in GHCi, rather than all top-level bindings as in interpreted modules.