12.2. Running GHCi on Windows

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.