In 4.08.2 (end of Jan 2001): Various minor bug-fixes, but nothing major.
New profiling subsystem, based on cost-centre stacks. See Chapter 4.
The x86 native code generator has been reworked considerably, and now works reliably. Using the NCG rather than compiling via C reduces compilation times by roughly a half while having minimal effect on the run-time of the compiled program (about 2-4% slower, worse for floating-point intensive programs).
The NCG is used by default for non-optimising compiles. You can use it with -O by adding the -fasm-x86 flag to GHC's command line, after -O.
Implicit parameters. This Haskell extension gives a statically-typed version of dynamic scoping that avoids the worst problems of dynamic scoping in lisp. See the POPL paper for more details. It is enabled by -fglasgow-exts.
New DEPRECATED pragma for marking outdated interfaces as deprecated.
New flag: -ddump-minimal-imports, which dumps a file M.imports that contains the (allegedly) minimal bunch of imports needed by the current module.
New “package” system for libraries. See Section 220.127.116.11 for the details.
The long-standing bug that caused some programs which used trace to exit with a deadlock error has been fixed.
If a thread is about to be garbage collected, because it is waiting on an MVar that no other thread has access to, then it will now be sent the BlockedOnDeadMVar exception.
A thread that is found to be blocked against itself (i.e. is black holed) is now sent a NonTermination exception.
Operations which may block, such as takeMVar, raiseInThread, and several I/O operations, may now receive asynchronous exceptions even in the scope of a blockAsyncExceptions. These are called interruptible operations. See Section 18.104.22.168 in Haskell Libraries for more details.
Result type signatures now work.
A truckload of bugfixes.
HaXml, a library for parsing and generating XML, has been added to the text package (Section 8.1 in Haskell Libraries).
The QuickCheck library for performing functional testing has been added to the util package (Section 9.3 in Haskell Libraries).
Two new experimental interfaces to arrays: IArray for immutable arrays (Section 4.12 in Haskell Libraries), and MArray for mutable arrays (Section 4.16 in Haskell Libraries). Comments on these interfaces are welcome; eventually we'd like them to replace ByteArray, MutableArray, IOArray, and STArray.
New function: tryTakeMVar.
hPutBuf, hPutBufBA, hGetBuf, and hGetBufBA, have been renamed to hPutBufFull, hPutBufBAFull, hGetBufFull, and hGetBufBAFull. Functions with the old names still exist, but have slightly different semantics. See Section 4.14.5 in Haskell Libraries for more details.
Con is gone; the CoreExpr type is simpler.
NoRepLits have gone.
Better usage info in interface files, which means less recompilation.
CCall primop is tidied up.
Constant folding is now done by Rules.
Lots of hackery in the simplifier.
Improvements in CPR and strictness analysis.