User visible changes
Major library reorganisation. The libraries are now split into 8 categories:
Same as the old concurrent library
Datatypes. Contains old FiniteMap and Set modules, and Chris Okasaki's Edison library.
contains most of the contents of the old exts library
networking-related libraries (Socket, SocketPrim, and new URI library).
numerical-related libraries (currently empty).
the old POSIX library
text-processing related libraries (including Andy Gill's HTML library)
various miscellaneous libraries, including John Hughes' and Koen Claessen's QuickCheck library.
Cleanup of concurrent I/O system. We now use non-blocking I/O on all Handles, so that multiple threads can do I/O simultaneously. We don't however do non-blocking I/O on stdout/stderr, due to reports that some shells don't correctly restore blocking mode on these file descriptors after running a program.
raiseInThread can now raise exceptions in threads blocked on I/O or time delays.
New functions in Exception
blockAsyncExceptions :: IO a -> IO a unblockAsyncExceptions :: IO a -> IO a
Asynchronous exceptions are now blocked by default inside an exception handler. Use unblockAsyncExceptions to restore the previous behaviour.
Add NetBSD/x86 support.
Added support for foreign export dynamic.
Build system cleanup—BIN_DIST=1 is now needed in build.mk (before building!) to build binary dists.
New RTS option -xc, which prints the current cost-centre stack to stderr whenever an exception is raised (only for profiling builds).
Not-quite-ready-yet, but in there nontheless
Building way 's' on a system with pthreads (only tested on Linux so far) will include support for running multiple Haskell threads on several pthreads simultaneously. If your system supports it, this will enable Haskell programs to take advantage of multiprocessor SMP machines.
Initial ports of GranSim and GUM to GHC 4 are in there. Not quite ready yet.
Heap profiling sort-of works. Only cost-centre heap profiles are supported so far.