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