Template Haskell, a new feature for compile-time metaprogramming has been introduced. See Section 7.6, “Template Haskell”.
INLINE pragmas on methods in class or instance declarations now work properly.
Recursive do-notation (aka mdo) is
now supported. See Section 7.3.3, “The recursive do-notation
”.
There is now a native code generator for PowerPC platforms.
Profiling: the -xt RTS option enables
inclusion of thread stacks in a heap profile. See Section 5.4.1, “RTS options for heap profiling”.
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.
Loading a Main module that does not
define main is no longer an error, although
GHCi will still emit a warning in this case.
Hierarchical libraries are now available without needing
to specify an explicit -package flag. There
are some exceptions to this rule (see Section 4.8.1, “Using Packages
”), but if you stick to GHCi and
--make mode then there will normally be no
need to specify -package options at
all.
Non-hierarchical libraries
(i.e. hslibs libraries) still need to be
explicitly requested with -package
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.
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).
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.