Release notes for version 6.0User-visible compiler changesTemplate 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) changesLoading 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 changesHierarchical 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 featuresThe 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 changesSweeping 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.