On Win32 platforms, the compiler is capable of both producing and using dynamic link libraries (DLLs) containing ghc-compiled code. This section shows you how to make use of this facility.
Until recently, strip didn't work reliably on DLLs, so you should test your version with care, or make sure you have the latest binutils. Unfortunately, we don't know exactly which version of binutils cured the problem (it was supposedly fixed some years ago).
The default on Win32 platforms is to link applications in such a way that the executables will use the Prelude and system libraries DLLs, rather than contain (large chunks of) them. This is transparent at the command-line, so
sh$ cat main.hs module Main where main = putStrLn "hello, world!" sh$ ghc -o main main.hs ghc: module version changed to 1; reason: no old .hi file sh$ strip main.exe sh$ ls -l main.exe -rwxr-xr-x 1 544 everyone 4608 May 3 17:11 main.exe* sh$ ./main hello, world! sh$
will give you a binary as before, but the main.exe generated will use the Prelude and RTS DLLs instead of linking them in statically.
4K for a "hello, world" application—not bad, huh? :-)