デフォルトでは、GHCiはHaskellソースコードをコンパイルして、ランタイムシステムが解釈できるバイトコードを出力する。GHCiはHaskellコードをオブジェクトコードにコンパイルすることもできる。この機能を有効にするには、コマンド行または:set
で-fobject-code
フラグを使えばよい。(-fbyte-code
とすればまた元のバイトコードコンパイルに戻る)。オブジェクトコードへのコンパイルは時間が掛かるが、コードはバイトコードと比べて10〜20倍早く動作する。
GHCi内でオブジェクトコードにコンパイルする機能は、コンパイル型アプリケーションを開発しているときに特に便利である。GHCを--make
オプション付きで再起動するのよりも:reload
コマンドがずっと速いからで、これはインタフェースファイルがすべてメモリにキャッシュされているからである。
オブジェクトコードにコンパイルすることには欠点もある。例えば、オブジェクトコードのモジュールにはブレークポイントを設定することができない。解釈実行されているモジュールでは全ての最上位の束縛がGHCiから可視であるのに対して、オブジェクトコードのモジュールではエクスポートされたものしか可視でない。