2.10. GHCi内でオブジェクトコードにコンパイルする

デフォルトでは、GHCiはHaskellソースコードをコンパイルして、ランタイムシステムが解釈できるバイトコードを出力する。GHCiはHaskellコードをオブジェクトコードにコンパイルすることもできる。この機能を有効にするには、コマンド行または:set-fobject-codeフラグを使えばよい。(-fbyte-codeとすればまた元のバイトコードコンパイルに戻る)。オブジェクトコードへのコンパイルは時間が掛かるが、コードはバイトコードと比べて10〜20倍早く動作する。

GHCi内でオブジェクトコードにコンパイルする機能は、コンパイル型アプリケーションを開発しているときに特に便利である。GHCを--makeオプション付きで再起動するのよりも:reloadコマンドがずっと速いからで、これはインタフェースファイルがすべてメモリにキャッシュされているからである。

オブジェクトコードにコンパイルすることには欠点もある。例えば、オブジェクトコードのモジュールにはブレークポイントを設定することができない。解釈実行されているモジュールでは全ての最上位の束縛がGHCiから可視であるのに対して、オブジェクトコードのモジュールではエクスポートされたものしか可視でない。