The "GHC for cygwin" is a misnomer, as GHC is mostly a native Win32 application. I haven't seen which backend for code generation GHC actually uses, but I assume it is built-in. I don't know if there is a build of GHC with MSVC, but as GHC is a compiler itself, I assume that GHC is compiled with itself mostly.
I am developing Pugs on Win32 without any problems, because the support of GHC for Win32 is really good and one can easily access the Win32 API from within GHC. There are some things that are different between Pugs/Win32 and Pugs/POSIX:
- fork() will not happen, or it will be the ugly abomination that fork emulation is under Perl5
- system() and built-in threading (async blocks) don't play together. This might be fixed by making GHC spawn OS threads when launching a system() command, so the rest of Pugs continues running.
- select() on non-sockets - WaitForSingleObject cannot wait for winsock.dll objects, and the select call of winsock does not know about the other kernel objects.