Release notes for version 4.07 (May 2000) User-visible compiler changes New profiling subsystem, based on cost-centre stacks. See . 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). Add the flag to GHC's command line to enable it. Implicit parameters. Functional dependencies. New DEPRECATED pragma for marking outdated interfaces as deprecated. New flag: , 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 for the details. The long-standing bug that caused some programs which used trace to exit with a deadlock error has been fixed. Trying to put into a full MVar will now raise a PutFullMVar exception. 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 for more details. Result type signatures now work. A truckload of bugfixes. User-visible library changes FFI. HaXml, a library for parsing and generating XML, has been added to the text package (). The QuickCheck library for performing functional testing has been added to the util package. Two new experimental interfaces to arrays: IArray for immutable arrays (), and MArray for mutable arrays (). Comments on these interfaces are welcome; eventually we'd like them to replace ByteArray, STArray and IOArray. New function: tryTakeMVar. MutableArray has gone away, use STArray (see ) instead. 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 for more details. Internal changes 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 now done by Rules. Lots of hackery in the simplifier. Improvements in CPR and strictness analysis.