2.9. .ghciファイル

GHCiは、開始するとき、-ignore-dot-ghciフラグが与えられていない限り、以下の各ファイルが存在していれば、この順で読み、書かれているコマンドを実行する。

  1. ./.ghci

  2. appdata/ghc/ghci.conf、ただしappdataはシステムに依存。通常はC:/Documents and Settings/user/Application Dataのようなところ。

  3. Unixでは、$HOME/.ghc/ghci.conf

  4. $HOME/.ghci

ghci.confファイルは、あなたのお気に入りのオプション(例えば:set +s)を有効にしたり、便利なマクロを定義したりするのに適している。注意: このファイルで言語オプションを設定する場合、通常は:setでなく :setiを使う方が良い(2.8.3. 対話的評価についてのみのオプションを設定するを見よ)。

.ghciをHaskellプロジェクトのディレクトリに置いて、プロジェクトで使われるオプションを設定するようにしておくと、GHCiを立ち上げるたびにそれを打ち込まなくて済むので便利である。例えば、プロジェクトが多引数の型クラスとスコープのある型変数ととCPPを使い、ソースファイルがA、B、Cという三つのサブディレクトリに置かれているなら、次の数行を.ghciに置くことができる。

:set -XMultiParamTypeClasses -XScopedTypeVariables -cpp
:set -iA:B:C

(厳密には-iフラグは静的オプションであるが、このように:setしても動くことに注意。ただし、この変更は、次に:loadが実行されるまで効果を発揮しない。)

GHCiマクロを沢山持つようになると、それらを別のファイルから調達したいと思うかもしれない。また、.ghciファイルをデバッグしているときに、それを実行中のGHCiにロードしたいと思うことがあるかもしれない。

:def source readFile

あなたの.ghciにこのマクロを置いておけば、:source fileとすることでfileからGHCiコマンドを読み込むことができる。Haskell wikiのページGHC/GHCiでは、.ghciについてのその他の助言を読むことが(そしてもちろん、追加することも)できる。

加えて、標準のファイルの後には-ghci-scriptフラグで指定されたファイルが全て読まれる。これによってデフォルト以外の.ghciファイルを使うことができる。

開始時ファイルが読まれるかどうかを制御する二つのコマンド行オプションがある。

-ignore-dot-ghci

開始するとき、./.ghciその他の開始時ファイルを読まない。

-ghci-script

通常の開始ファイルの後に指定されたファイルを読む。繰り返すことで複数の入力を指定できる。

GHCiマクロを定義する際、名前が組み込みコマンドと衝突するかもしれない場合、特にtab補完に関して知っておいた方が良い重要な振る舞いがある。

例えば、:timeというコマンドを定義したとして、シェルで:t 3と打ち込んだ場合に何が起こるべきだろうか。現在、コマンド補完のアルゴリズムは以下である。

  1. まず、定義されているマクロの中から完全一致のものを探す。

  2. 組み込みコマンドの一覧の中から完全一致のものを探す。

  3. 組み込みコマンドの一覧から前方一致で探す。該当する組み込みコマンドがあり、さらにそれと同名のマクロもあるなら、マクロの方を選ぶ。

  4. 組み込みコマンドの一覧から前方一致で探す。

  5. 定義済みマクロの一覧から前方一致で探す。

例をいくつか挙げる。

  1. :timeというマクロがあり、:t 3と入力する

    :type 3の意味になる。

  2. :typeというマクロがあり、:t 3と入力する

    :type 3の意味になる。ここで、組み込みコマンドではなく定義されたマクロの方が使われる。

  3. :timeというマクロと:typeというマクロがあり、:t 3と入力する

    :type 3の意味になる。定義されたマクロの方が使われる。