Release notes for version 6.0 User-visible compiler changes Template Haskell, a new feature for compile-time metaprogramming has been introduced. See . INLINE pragmas on methods in class or instance declarations now work properly. Recursive do-notation (aka mdo) is now supported. See . There is now a native code generator for PowerPC platforms. Profiling: the RTS option enables inclusion of thread stacks in a heap profile. See . Non-blocking I/O is now supported on Windows. The Typeable class can now be derived, and the implementation of Typeable is now more efficient. User-visible interpreter (GHCi) changes Loading a Main module that does not define main is no longer an error, although GHCi will still emit a warning in this case. User-visible library changes Hierarchical libraries are now available without needing to specify an explicit flag. There are some exceptions to this rule (see ), but if you stick to GHCi and mode then there will normally be no need to specify options at all. Non-hierarchical libraries (i.e. hslibs libraries) still need to be explicitly requested with options. The Posix library has been rewritten. It is now a hierarchical library rooted at System.Posix, and has some additions aimed at supporting the latest revision of the POSIX standard (IEEE Std 1003.1-2001). See the unix package for details. The old posix package is still available for backwards compatibility, but is deprecated and will be removed in a future release. Data.IORef: Added atomicModifyIORef. System.Cmd: Added rawSystem. System.Environment: Added withArgs and withProgName. Network.Socket: Added sendFd and recvFd. The Readline library has moved to System.Console.Readline, and is in a package of its own (readline). The non-hierarchical versions of the FFI libraries are now all available without needing to specify -package lang (they are actually now in the haskell98 package, which is available by default). Network.BSD: symlink and readline are now deprecated; use System.Posix.createSymbolicLink and System.Posix.readSymbolicLink respectively. Control.Exception: Added mapException. Data.Dynamic: various changes to make the implementation of Typeable more efficient. This entails some changes to the interface, and affects how instances of Typeable are defined. Data.Tree is a new library for trees. Data.Graph is a new library for graphs. System.IO: Removed bracket and bracket_ (use the versions from Control.Exception instead). System.IO: The IOError type is now a synonym for IOException, whereas previously it was a synonym for Exception. This has various consequences, one of which is that the types of System.IO.catch and Control.Exception.catch are now different (useful, because they do different things). System.IO.Error: added annotateIOError, modifyIOError, and ioeSet{ErrorType,ErrorString,Handle,FileName}. Text.ParserCombinators.ReadP: lots of updates. Control.Monad.Monoid is now Data.Monoid. Data.PackedString: added joinPS, unwordsPS and unlinesPS. Data.HashTable is a new dynamic hash-table implementation. Added System.Sendfile. Added Foreign.Marshal.Pool. Data.Bits: shiftL, shiftR, rotateL, and rotateR are now methods of the Bite class. The FFI libraries now conform to the latest version of the FFI spec: Added Foreign.ForeignPtr.mallocForeignPtr and friends. Finalizers added to a ForeignPtr with addForeignPtrFinalizer are now run in strict order; namely the reverse of the order they were added. Foreign.C.TypesISO has been merged into Foreign.C.Types. Experimental features The Data class provides for generic data traversals and folds; see Data.Generics. Data can be derived for arbitrary datatypes. The Data class is still experimental, so its contents may change in the future. Several bugs have been fixed in the threaded RTS, and it should now be rather more robust (it should still be considered experimental, however). Internal changes Sweeping changes to the compiler and runtime system to change the evaluation model from push/enter to eval/apply. The bottom line is that the compiler is now more portable and some of the complexity is now more centralised, while performance and binary sizes remain about the same. A paper describing these changes can be found here. The test suite is now driven by a Python script and is rather more flexible and robust. It now supports building tests several different "ways", and as a result we now run each test with optimisation, profiling, native code generation, and GHCi in addition to the vanilla way. The build system now supports bootstrapping the compiler in a single build tree. By default, typing make at the top level will bootstrap the compiler once to create a stage-2 compiler. See the Building Guide for more details. The RTS debugging flags are no longer represented by a bitfield and now have single-character names. For example, to turn on scheduler debugging output, use -Ds rather than -D1. The compiler no longer requires any packages from hslibs to bootstrap. It is enough to compile fptools/libraries before building the stage 2 compiler.