12.2. WindowsでGHCiを実行する

我々は、GHCiを標準のWindowsコンソールで実行することを推奨する。インストーラが追加したスタートメニューの項目からGHCiを選ぶか、スタート→プログラムを指定して実行→cmdを使ってWindowsコンソールに入り、そこからghciを起動すれば良い。(ただし、この場合、ghciPATHに入っている必要がある)

GHCiをCygwinやMSYSのシェルから使うと、Ctrl-Cの振る舞いがおかしくなる。これらの環境ではGHCiを開始するのにghcii.shスクリプトを使うべきであり、そうでないとCtrl-Cを叩いたときにシェルのプロンプトに戻され、しかもGHCiのプロセスは走りつづけるという事態になる。ただし、ghcii.shを使った場合でも、Ctrl-Cを叩いた場合、GHCiの中で走っているプログラムを中断することは(できるべきだが)できず、代わりにGHCiのプロセスが即座に殺される。この問題の原因は、CygwinとMSYSのシェル環境がCtrl-Cのイベントを非Cygwinの子プロセスに渡さない(それにはWindowsコンソールである必要があるので)ことである。

例外がひとつある。CYGWIN環境変数にttyが含まれない場合、Cygwinのシェルを使うことができる。このモードでは、CygwinのシェルはWindowsのコンソールシェルとして振る舞い、コンソールイベントは子プロセスに伝播される。CYGWIN環境変数はCygwinのシェルを起動するに設定されねばならぬことに注意。後で変更してもシェルには何の影響も与えられない。

この問題が影響するのはGHCiだけでなく、GHCでコンパイルされたプログラムで、コンソールイベントを補足したいあらゆるプログラムに影響する。 GHC.ConsoleHandlerモジュールを見よ。