.ghci
ファイルGHCiは、開始するとき、-ignore-dot-ghci
フラグが与えられていない限り、以下の各ファイルが存在していれば、この順で読み、書かれているコマンドを実行する。
./.ghci
、ただしappdata
/ghc/ghci.confappdata
はシステムに依存。通常はC:/Documents and Settings/
のようなところ。user
/Application Data
Unixでは、$HOME/.ghc/ghci.conf
$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
と打ち込んだ場合に何が起こるべきだろうか。現在、コマンド補完のアルゴリズムは以下である。
まず、定義されているマクロの中から完全一致のものを探す。
組み込みコマンドの一覧の中から完全一致のものを探す。
組み込みコマンドの一覧から前方一致で探す。該当する組み込みコマンドがあり、さらにそれと同名のマクロもあるなら、マクロの方を選ぶ。
組み込みコマンドの一覧から前方一致で探す。
定義済みマクロの一覧から前方一致で探す。
例をいくつか挙げる。
:time
というマクロがあり、:t 3
と入力する
:type 3
の意味になる。
:type
というマクロがあり、:t 3
と入力する
:type 3
の意味になる。ここで、組み込みコマンドではなく定義されたマクロの方が使われる。
:time
というマクロと:type
というマクロがあり、:t 3
と入力する
:type 3
の意味になる。定義されたマクロの方が使われる。