Release notes for version 7.10.1
The significant changes to the various parts of the compiler are listed
in the following sections. There have also been numerous bug fixes and
performance improvements over the 7.8 branch.
Highlights
The highlights, since the 7.8 branch, are:
TODO FIXME
Full detailsLanguage
Added support for binary integer literals
Simplified rules for implicit quantification. In previous versions of GHC,
it was possible to use the => arrow
to quantify over type variables in data and
type declarations without a
forall quantifier. For example,
data Fun = Fun (Ord a => a -> b) was identical to
data Fun = Fun (forall a b. Ord a => a -> b), while
data Fun = Fun (a -> b) caused a not-in-scope error.
This implicit quantification is now deprecated, and variables
in higher-rank constructors should be quantified with forall
regardless of whether a class context is present or not.
GHC 7.10 raises a warning (controlled by
, enabled by default)
and GHC 7.12 will raise an error. See examples
in GHC documentation.
The change also applies to Template Haskell splices such as
[t|Ord a => a|], which should be written as
[t|forall a. Ord a => a|].
Compiler
GHC now checks that all the language extensions required for
the inferred type signatures are explicitly enabled. This
means that if any of the type signatures inferred in your
program requires some language extension you will need to
enable it. The motivation is that adding a missing type
signature inferred by GHC should yield a program that
typechecks. Previously this was not the case.
This is a breaking change. Code that used to compile in the
past might fail with an error message requiring some
particular language extension (most likely
, or
).
GHCi
TODO FIXME
Template Haskell
TODO FIXME
Runtime system
TODO FIXME
Build systemghc-pkg now respects
and when modifying packages (e.g.
changing exposed/trust flag or unregistering). Previously,
ghc-pkg would ignore these flags and modify
whichever package it found first on the database stack. To
recover the old behavior, simply omit these flags.
ghc-pkg accepts a
flag which allows a user to override the location of the user package
database. Unlike databases specified using ,
a user package database configured this way respects
the flag.
Package system
TODO: cover module renaming, thinning, re-export etc
ghc-pkg (and ghc) have dropped support for single-file style
package databases. Since version 6.12, ghc-pkg has defaulted
to a new database format (using a directory of files, one per
package plus a binary cache).
This change will not affect programs and scripts that use
ghc-pkg init to create package databases.
This will affect scripts that create package databases
using tricks like
echo "[]" > package.conf
Such scripts will need to be modified to use
ghc-pkg init, and to delete databases
by directory removal, rather than simple file delete.
Librariesarray
Version number XXXXX (was 0.5.0.0)
base
Version number XXXXX (was 4.7.0.0)
bin-package-db
This is an internal package, and should not be used.
binary
Version number XXXXX (was 0.7.1.0)
bytestring
Version number XXXXX (was 0.10.4.0)
Cabal
Version number XXXXX (was 1.18.1.3)
containers
Version number XXXXX (was 0.5.4.0)
deepseq
Version number XXXXX (was 1.3.0.2)
directory
Version number XXXXX (was 1.2.0.2)
filepath
Version number XXXXX (was 1.3.0.2)
ghc
Many internal functions in GHC related to package IDs have been
renamed to refer to package keys, e.g. PackageId
is now PackageKey, the wired-in names
such as primPackageId are now
primPackageKey, etc. This reflects a distinction
that we are now making: a package ID is, as before, the user-visible
ID from Cabal foo-1.0; a package key is now
a compiler-internal entity used for generating linking symbols, and
may not correspond at all to the package ID. In
particular, there may be multiple package keys per
package ID.
The ghc library no longer depends on the Cabal library. This means
that users of the ghc library are no longer forced to use the same
version of Cabal as ghc did. It also means that Cabal is freed up
to be able to depend on packages that ghc does not want to depend
on (which for example may enable improvements to Cabal's parsing
infrastructure).
ghc-prim
Version number XXXXX (was 0.3.1.0)
haskell98
Version number XXXXX (was 2.0.0.3)
haskell2010
Version number XXXXX (was 1.1.1.1)
hoopl
Version number XXXXX (was 3.10.0.0)
hpc
Version number XXXXX (was 0.6.0.1)
integer-gmp
Version number XXXXX (was 0.5.1.0)
old-locale
Version number XXXXX (was 1.0.0.6)
old-time
Version number XXXXX (was 1.1.0.2)
process
Version number XXXXX (was 1.2.0.0)
template-haskell
Version number XXXXX (was 2.9.0.0)
time
Version number XXXXX (was 1.4.1)
unix
Version number XXXXX (was 2.7.0.0)
Win32
Version number XXXXX (was 2.3.0.1)
Known bugs
TODO FIXME