We recommend running GHCi in a standard Windows console:
select the GHCi
option from the start menu item
added by the GHC installer, or use
Start->Run->cmd
to get a Windows console and
invoke ghci
from there (as long as it's in your
PATH
).
If you run GHCi in a Cygwin or MSYS shell, then the Control-C
behaviour is adversely affected. In one of these environments you
should use the ghcii.sh
script to start GHCi,
otherwise when you hit Control-C you'll be returned to the shell
prompt but the GHCi process will still be running. However, even
using the ghcii.sh
script, if you hit Control-C
then the GHCi process will be killed immediately, rather than
letting you interrupt a running program inside GHCi as it should.
This problem is caused by the fact that the Cygwin and MSYS shell
environments don't pass Control-C events to non-Cygwin child
processes, because in order to do that there needs to be a Windows
console.
There's an exception: you can use a Cygwin shell if the
CYGWIN
environment variable does
not contain tty
. In this
mode, the Cygwin shell behaves like a Windows console shell and
console events are propagated to child processes. Note that the
CYGWIN
environment variable must be set
before starting the Cygwin shell; changing it
afterwards has no effect on the shell.
This problem doesn't just affect GHCi, it affects any GHC-compiled program that wants to catch console events. See the GHC.ConsoleHandler module.