Full support for MacOS X, including fully optimized compilation, has been added. Only a native
code generator and support for -split-objs is still missing.
Everything else needs more testing, but should work.
ghc-pkg: new options
--auto-ghci-libs,
-u/--update-package,
--force, and
-i/--input-file, and
suppport for expanding environment variables in package
descriptions. See Section 4.10).
The latest version of the FFI spec is fully supported.
The syntax of FFI declarations has changed accordingly. The
old syntax is still accepted for the time being, but will
elicit a warning from the compiler.
New option: -F specifies a user-defined
preprocessing phase (see Section 4.12.4).
Major overhaul of the heap profiling subsystem, with new
facilities for retainer profiling and biographical profiling
(ala nhc98, albeit with a couple of omissions). The syntax of
the runtime heap-profiling options has changed. See Section 5.4.
The type system now supports full rank-N types
(previously only limited rank-2 types were supported). See
Section 7.3.9.
Explicit kind annotations can now be given on any
binding occurrence of a type variable. See Section 7.3.3.
The handling of type synonyms has been rationalised.
See Section 7.3.10.
Fixes for several space leaks in the compiler itself
(these fixes were also merged into 5.02.3).
It is now possible to derive arbitrary classes for
newtypes. See Section 7.9.
Deadlock is now an exception, rather than a return
status from the scheduler. See the module
Control.Exception in the library
documentation for more details.
The syntax and behaviour of RULE
pragmas has changed slightly. See Section 7.7.
Interface files are now in a binary format to reduce
compilation times. To view an interface file in plain text,
use the --show-iface flag.
A restriction on the form of class declarations has been
lifted. In Haskell 98, it is illegal for class method types
to mention constraints on the class type variable. eg.
class Seq s a where
elem :: Eq a => a -> s a -> Bool
This restriction has now been lifted in GHC.
Main threads can now receive the
BlockedOnDeadMVar exception in the same way
as other threads.
The -fall-strict flag never really
worked, and has been removed.
The syntax of .hi-boot files is now
much clearer and Haskell-like. See Section 4.9.7.
There is a new flag -fffi which enables
FFI support without turning on the rest of the GHC
extensions.
The syntax for implicit parameter bindings has changed.
Previously the keyword with was used to
introduce implicit bindings, but now implicit bindings may be
introduced using let (see Section 7.3.6). As a result of this,
with is no longer a keyword when
-fglasgow-exts is turned on.
The option -fwith may be used to
restore the old behaviour.
Infix type constructors are now allowed, and must begin
with a colon (as with data constructors). See Section 7.3.2.
The do-notation syntax is now
rebindable in the same way as other built-in syntax. See
Section 7.5.4.
Support for using “frameworks” on
Darwin/MacOS X has been added. See the
-framework option in Section 4.12.7, and the
framework_dirs field of a package spec in
Section 4.10.4.
New commands: :browse, :set
args, :set prog, :show
binadings, and :show modules (see
Section 3.6).
There is a much more flexible mechanism for manipulating
the scope for expressions typed at the prompt. For example,
one can now have both the Prelude and the
exports of several compiled modules in scope at the same
time. See Section 3.4.1.
GHCi now supports foreign import
"wrapper" FFI declarations.
GHC is in the process of moving to a new hierarchical
set of libraries. At the moment, we have two sets of
libraries, both described in accompanying documents:
The “new libraries” which are
hierarchical and consist of the following packages:
base, haskell98,
haskell-src, and
network. Broadly speaking,
base contains the
Prelude, standard libraries and most of
the contents of the old lang
package. By default, the base and
haskell98 packages are enabled.
The hslibs, most of which are now
deprecated. Where possible, new code should be written to
use the new libraries instead.
The following libraries in hslibs
have not moved yet:
The packages win32,
xlib, graphics,
and posix.
The Edison libraries in the
data package.
In the lang package, the
modules TimeExts,
DirectoryExts,
SystemExts, and
NumExts.
The HaXml libraries in the
text package.
In the util package, the
modules MD5,
Select, Memo,
Observe, and
Readline.
All other libraries from hslibs
either have equivalents in the new libraries (see the
hslibs docs for details), or were
already deprecated and hence were not moved into the new
hierarchy.
The Read class is now based on a
parsing combinator library which is vastly more efficient than
the previous one. See the modules
Text.Read.
Text.ParserCombinators.ReadP, and
Text.ParserCombinators.ReadPrec in the
library documentation.
The code generated by the compiler for derived
Read instances should be much shorter than
before.
The RTS has support for running in a multi-threaded
environment and making non-blocking (from Haskell's point of
view) calls to foreign C functions which would normally block.
To enable this behaviour, configure with the
--enable-threaded-rts option.
The compiler can now read in files containing Core
syntax (such as those produced by the
-fext-core option) and compile them. Input
files with the .hcr file extension are
assumed to contain Core syntax.