<?xml version="1.0" encoding="iso-8859-1"?>
<sect1 id="release-6-12-1">
  <title>Release notes for version 6.12.1</title>

  <para>
    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 6.10 branch.
  </para>

  <sect2>
    <title>Language changes</title>
    <itemizedlist>
      <listitem>
        <para>
          The new <literal>TupleSections</literal> language extension
          enables tuple sections, such as <literal>(, True)</literal>.
          See <xref linkend="tuple-sections" /> for more information.
        </para>
      </listitem>

      <listitem>
        <para>
          The new <literal>MonoLocalBinds</literal> language extension
          disables type variable generalisation for bindings in
          <literal>let</literal> and <literal>where</literal> clauses.
        </para>
      </listitem>

      <listitem>
        <para>
          The new <literal>DeriveFunctor</literal>,
          <literal>DeriveFoldable</literal> and
          <literal>DeriveTraversable</literal> language extensions
          enable deriving for the respective type classes.
          See <xref linkend="deriving-typeable" /> for more information.
        </para>
      </listitem>

      <listitem>
        <para>
          The new <literal>NoNPlusKPatterns</literal> language extension
          disables <literal>n+k</literal> patterns.
          See <xref linkend="n-k-patterns" /> for more information.
        </para>
      </listitem>

      <listitem>
        <para>
          Some improvements have been made to record puns:
        </para>
        <itemizedlist>
          <listitem>
            <para>
              <literal>C { A.a }</literal> now works, expanding to
              <literal>C { A.a = a }</literal>.
            </para>
          </listitem>

          <listitem>
            <para>
              <literal>-fwarn-unused-matches</literal> no longer
              warns about bindings introduced by
              <literal>f (C {..}) = x</literal>.
            </para>
          </listitem>

          <listitem>
            <para>
              The <literal>RecordWildCards</literal> language
              extension implies
              <literal>DisambiguateRecordFields</literal>.
            </para>
          </listitem>
        </itemizedlist>
      </listitem>

      <listitem>
        <para>
          Declarations such as
        </para>
<programlisting>
data T a where
    MkT :: forall a. Eq a => { x,y :: !a } -> T a
</programlisting>
        <para>
          are now only accepted if the extension
          <literal>TypeOperators</literal> is on.
        </para>
      </listitem>

      <listitem>
        <para>
          It is now possible to define GADT records with class
          constraints. The syntax is:
        </para>
<programlisting>
data T a where
    MkT :: forall a. Eq a => { x,y :: !a } -> T a
</programlisting>
      </listitem>

      <listitem>
        <para>
          You can now list multiple GADT constructors with the same type,
          e.g.:
        </para>
<programlisting>
data T where
    A, B :: T
    C :: Int -> T
</programlisting>
      </listitem>

      <listitem>
        <para>
          It is now possible to use GADT syntax for data families:
        </para>
<programlisting>
data instance T [a] where
    T1 :: a -> T [a]
</programlisting>
        <para>
          and make data instances be GADTs:
        </para>
<programlisting>
data instance T [a] where
    T1 :: Int -> T [Int]
    T2 :: a -> b -> T [(a,b)]
</programlisting>
      </listitem>

      <listitem>
        <para>
          Record updates can now be used with datatypes containing
          existential type variables, provided the fields being altered
          do not mention the existential types.
        </para>
      </listitem>

      <listitem>
        <para>
          The <literal>ImpredicativeTypes</literal> extension now imples
          the <literal>RankNTypes</literal> extension.
        </para>
      </listitem>

      <listitem>
        <para>
          The <literal>ImpredicativeTypes</literal> extension is no
          longer enabled by <literal>-fglasgow-exts</literal>.
        </para>
      </listitem>

      <listitem>
        <para>
          You can now give multi-line <literal>DEPRECATED</literal> and
          <literal>WARNING</literal> pragmas:
        </para>
<programlisting>
{-# DEPRECATED defaultUserHooks
     ["Use simpleUserHooks or autoconfUserHooks, unless you need Cabal-1.2"
     , "compatibility in which case you must stick with defaultUserHooks"]
  #-}
</programlisting>
      </listitem>

      <listitem>
        <para>
          The <literal>-#include</literal> flag and
          <literal>INCLUDE</literal> pragma are now deprecated and
          ignored.  Since version 6.10.1, GHC has generated its own C
          prototypes for foreign calls, rather than relying on
          prototypes from C header files.
        </para>
      </listitem>

      <listitem>
        <para>
          The <literal>threadsafe</literal> foreign import safety level
          is now deprecated; use <literal>safe</literal> instead.
        </para>
      </listitem>

      <listitem>
        <para>
          There is a new FFI calling convention called
          <literal>prim</literal>, which allows calling C-- functions
          (see <xref linkend="ffi-prim" />).
          Most users are not expected to need this.
        </para>
      </listitem>
    </itemizedlist>
  </sect2>

  <sect2>
    <title>Warnings</title>
    <itemizedlist>
      <listitem>
        <para>
          A warning is now emitted if an unlifted type is bound in a
          lazy pattern (in <literal>let</literal> or
          <literal>where</literal> clause, or in an irrefutable pattern)
          unless it is inside a bang pattern.
          This warning is controlled by the
          <literal>-fwarn-lazy-unlifted-bindings</literal> flag.
          In a future version of GHC this will be an error.
        </para>
      </listitem>

      <listitem>
        <para>
          There are two new warnings if a monadic result of type other than
          <literal>m ()</literal> is used in a <literal>do</literal>
          block, but its result is not bound.
          The flags <literal>-fwarn-unused-do-bind</literal>
          and <literal>-fwarn-wrong-do-bind</literal> control
          these warnings (see <xref linkend="options-sanity" />).
        </para>
      </listitem>

      <listitem>
        <para>
          The new flag <literal>-fwarn-dodgy-exports</literal> controls
          whether an error is given for exporting a type synonym as
          <literal>T(..)</literal>.
        </para>
      </listitem>

      <listitem>
        <para>
          Name shadowing warnings are no longer given for variable names
          beginning with an underscore.
        </para>
      </listitem>

      <listitem>
        <para>
          When <literal>-Werror</literal> is given, we now pass
          <literal>-Werror</literal> to <literal>cpp</literal>.
        </para>
      </listitem>
    </itemizedlist>
  </sect2>

  <sect2>
    <title>Runtime system</title>

    <para>The following options are all described in
      <xref linkend="rts-options-gc" />.</para>

    <itemizedlist>
      <listitem>
        <para>
          The flag <literal>+RTS -N</literal> now automatically
          determines how many threads to use, based on the number
          of CPUs in your machine.
        </para>
      </listitem>

      <listitem>
        <para>
          The parallel GC now uses the same threads as the mutator,
          with the consequence that you can no longer select a
          different number of threads to use for GC.
          The <option>-g<replaceable>n</replaceable></option> RTS
          option has been removed, except that <option>-g1</option> is
          still accepted for backwards compatibility.
        </para>

        <para>
          The new flag
          <literal>+RTS -qg<replaceable>gen</replaceable></literal> sets
          the minimum generation for which parallel garbage collection
          is used.  Defaults to 1.  The flag <literal>-qg</literal> on
          its own disables parallel GC.
        </para>
      </listitem>

      <listitem>
        <para>
          The new flag <literal>+RTS -qb<replaceable>gen</replaceable></literal>
          controls load balancing in the parallel GC.
        </para>
      </listitem>

      <listitem>
        <para>
          The new flag <literal>+RTS -qa</literal>
          uses the OS to set thread affinity (experimental).
        </para>
      </listitem>

      <listitem>
        <para>
          If you link with the <literal>-eventlog</literal> flag, then
          the new flag <literal>+RTS -l</literal> generates
          <literal><replaceable>prog</replaceable>.eventlog</literal>
          files, which tools such as ThreadScope can use to show the
          behaviour of your program (see <xref linkend="rts-eventlog" />). The
          <literal>+RTS -D><replaceable>x</replaceable></literal> output
          is also sent to the eventlog file if this option is enabled.
          The <literal>+RTS -v</literal> flag sends eventlog data to
          stderr instead.
        </para>
      </listitem>

      <listitem>
        <para>
          There is a new statistic in the <literal>+RTS -s</literal> output:
        </para>
<programlisting>
SPARKS: 1430 (2 converted, 1427 pruned)
</programlisting>
        <para>
          This tells you how many sparks (requests for parallel
          execution, caused by calls to <literal>par</literal>) were
          created, how many were actually evaluated in parallel
          (converted), and how many were found to be already evaluated
          and were thus discarded (pruned). Any unaccounted for sparks
          are simply discarded at the end of evaluation.
        </para>
      </listitem>
    </itemizedlist>
  </sect2>

  <sect2>
    <title>Build system</title>
    <itemizedlist>
      <listitem>
        <para>
          We now require GHC >= 6.8 to build.
        </para>
      </listitem>

      <listitem>
        <para>
          We now require that gcc is >= 3.0.
        </para>
      </listitem>

      <listitem>
        <para>
          In order to generate the parsers, happy >= 1.16 is now
          required. The parsers are pre-generated in the source tarball,
          so most users will not need Happy.
        </para>
      </listitem>

      <listitem>
        <para>
          It is now possible to build GHC with a simple, BSD-licensed
          Haskell implementation of Integer, instead of the
          implementation on top of GMP. To do so, set
          <literal>INTEGER_LIBRARY</literal> to
          <literal>integer-simple</literal> in
          <literal>mk/build.mk</literal>.
        </para>
      </listitem>

      <listitem>
        <para>
          The build system has been rewritten for the 6.12 series.
          See <ulink url="http://hackage.haskell.org/trac/ghc/wiki/Building/Using">the building guide</ulink>
          for more information.
        </para>
      </listitem>

      <listitem>
        <para>
          The build system now uses variables like
          <literal>bindir</literal> compatibly with the GNU standard.
        </para>
      </listitem>
    </itemizedlist>
  </sect2>

  <sect2>
    <title>Compiler</title>
    <itemizedlist>
      <listitem>
        <para>
          The "Interface file version" field of the
          <literal>ghc --info</literal> output has been removed, as it
          is no longer used by GHC.
        </para>
      </listitem>

      <listitem>
        <para>
          There is a new "LibDir" field in the
          <literal>ghc --info</literal> output.
        </para>
      </listitem>

      <listitem>
        <para>
          A field <replaceable>f</replaceable> in the
          <literal>ghc --info</literal> can now be printed with
          <literal>ghc --print-<replaceable>f</replaceable></literal>, with letters lower-cased
          and spaces replaced by dashes.
        </para>
      </listitem>

      <listitem>
        <para>
          GHC now works (as a 32bit application) on OS X Snow Leopard.
        </para>
      </listitem>

      <listitem>
        <para>
          The native code generator now works on Sparc Solaris.
        </para>
      </listitem>

      <listitem>
        <para>
          Haddock interface files are now portable between different
          architectures.
        </para>
      </listitem>

      <listitem>
        <para>
          The new linker flag <literal>-eventlog</literal> enables the
          <literal>+RTS -l</literal> event logging features. The
          <literal>-debug</literal> flag also enables them.
        </para>
      </listitem>

      <listitem>
        <para>
          There is a new flag <literal>-feager-blackholing</literal>
          which typically gives better performing code when running
          with multiple threads.
          See <xref linkend="parallel-compile-options" /> for more
          information.
        </para>
      </listitem>

      <listitem>
        <para>
          There is a new flag <literal>-fbuilding-cabal-package</literal>
          which signals to GHC that it is being run by a build system,
          rather than invoked directly. This currently means that GHC
          gives different error messages in certain situations.
        </para>
      </listitem>

      <listitem>
        <para>
          The following flags were static, but are now dynamic:
          <literal>-fext-core</literal>,
          <literal>-fauto-sccs-on-all-toplevs</literal>,
          <literal>-auto-all</literal>,
          <literal>-no-auto-all</literal>,
          <literal>-fauto-sccs-on-exported-toplevs</literal>,
          <literal>-auto</literal>,
          <literal>-no-auto</literal>,
          <literal>-fauto-sccs-on-individual-cafs</literal>,
          <literal>-caf-all</literal> and
          <literal>-no-caf-all</literal>.
        </para>
      </listitem>
    </itemizedlist>
  </sect2>

  <sect2>
    <title>GHCi</title>
    <itemizedlist>
      <listitem>
        <para>
          If the argument to <literal>:set prompt</literal> starts with
          a double quote then it is read with Haskell String syntax,
          e.g.:
        </para>
<programlisting>
Prelude> :set prompt "Loaded: %s\n> "
Loaded: Prelude
> 
</programlisting>
      </listitem>

      <listitem>
        <para>
          The arguments to <literal>:set set</literal>
          and <literal>:set show</literal> can now be tab completed.
        </para>
      </listitem>

      <listitem>
        <para>
          We inherit some benefits from an upgraded version of haskeline:
        </para>
          <itemizedlist>
            <listitem>
              <para>
                A multitude of new emacs and vi commands.
              </para>
            </listitem>

            <listitem>
              <para>
                New preference 'historyDuplicates' to prevent storage
                of duplicate lines.
              </para>
            </listitem>

            <listitem>
              <para>
                Support PageUp and PageDown keys.
              </para>
            </listitem>
          </itemizedlist>
      </listitem>
    </itemizedlist>
  </sect2>

  <sect2>
    <title>Template Haskell</title>
    <itemizedlist>
      <listitem>
        <para>
          You can now omit the splice notation for top-level declaration
          splices, e.g.:
        </para>
<programlisting>
data T = T1 | T2
deriveMyStuff ''T
</programlisting>
      </listitem>

      <listitem>
        <para>
          Splices are now nestable, e.g. you can say
          <literal>f x = $(g $(h 'x))</literal>.
        </para>
      </listitem>

      <listitem>
        <para>
          It is now possible to splice in types.
        </para>
      </listitem>
    </itemizedlist>
  </sect2>

  <sect2>
    <title>Package Handling</title>
    <itemizedlist>
      <listitem>
        <para>
          Shared libraries are now supported on x86 and x86_64 Linux.
          To use shared libraries, use the <literal>-dynamic</literal>
          flag.
          See <xref linkend="using-shared-libs" />  for more information.
        </para>
      </listitem>

      <listitem>
        <para>
          The new <literal>-fno-shared-implib</literal> flag can be used
          to stop GHC generating the <literal>.lib</literal> import
          library when making a dynamic library. This reduces the disk
          space used when you do not need it.
        </para>
      </listitem>

      <listitem>
        <para>
          Packages can now be identified by a "package ID", which is
          based on a hash of the ABIs. The new flag
          <literal>-package-id</literal> allows packages to be
          selected by this identifier (see <xref linkend="package-ids"
          />).  Package IDs enable GHC to detect potential
          incompatibilities between packages and broken dependencies
          much more accurately than before.
        </para>
      </listitem>

      <listitem>
        <para>
          The new flag <literal>--abi-hash</literal>, used thus:
        </para>
<programlisting>
ghc --abi-hash M1 M2 ...
</programlisting>
        <para>
          prints the combined hash of all the modules listed. It is
          used to make package IDs.
        </para>
      </listitem>

      <listitem>
        <para>
          You can now give <literal>ghc-pkg</literal> a
          <literal>-v0</literal> flag to make it be silent,
          <literal>-v1</literal> for normal verbosity (the default),
          or <literal>-v2</literal> or <literal>-v</literal> for
          verbose output.
        </para>
      </listitem>

      <listitem>
        <para>
          Rather than being a single <literal>package.conf</literal> file,
          package databases now consist of a directory containing one
          file per package, and a binary cache of the information.
          GHC should be much faster to start up when the package
          database grows large.
        </para>
      </listitem>

      <listitem>
        <para>
          There is a new command <literal>ghc-pkg init</literal> to
          create a package database.
        </para>
      </listitem>

      <listitem>
        <para>
          There is a new command <literal>ghc-pkg dot</literal> to
          generate a GraphViz graph of the dependencies between
          installed packages.
        </para>
      </listitem>

      <listitem>
        <para>
          There is a new command <literal>ghc-pkg recache</literal> to
          update the package database cache should it become out of
          date, or for registering packages manually.
        </para>
      </listitem>
    </itemizedlist>
  </sect2>

  <sect2> 
    <title>Libraries</title>

    <para>
      GHC no longer comes with any extralibs; instead, the
      <ulink url="http://hackage.haskell.org/platformi/">Haskell Platform</ulink>
      will provide a consistent set of additional libraries.
    </para>

    <sect3>
      <title>array</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 0.3.0.0 (was 0.2.0.0)
          </para>
        </listitem>

        <listitem>
          <para>
            The <literal>Data.Array.Diff</literal> module has been moved
            to its own package.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>base</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 4.2.0.0 (was 4.1.0.0)
          </para>
        </listitem>

        <listitem>
          <para>
            We also ship a base version 3.0.3.2 (was 3.0.3.1), so legacy
            code should continue to work. This package is now deprecated,
            and will be removed in a future version of GHC.
          </para>
        </listitem>

        <listitem>
          <para>
            Handle IO now supports automatic character set encoding
            and newline translation. For more information, see the
            "Unicode encoding/decoding" and "Newline conversion" sections
            in the <literal>System.IO</literal> haddock docs.
          </para>
        </listitem>

        <listitem>
          <para>
            Lazy I/O now throws an exception if an error is
            encountered, in a divergence from the Haskell 98 spec which
            requires that errors are discarded (see Section 21.2.2 of
            the Haskell 98 report).  The exception thrown is the usual
            IO exception that would be thrown if the failing IO
            operation was performed in the IO monad, and can be caught
            by <literal>System.IO.Error.catch</literal>
            or <literal>Control.Exception.catch</literal>.
          </para>
        </listitem>

        <listitem>
          <para>
            It is now possible to create your own handles.
            For more information, see the
            <literal>GHC.IO.Handle</literal> haddock docs.
          </para>
        </listitem>

        <listitem>
          <para>
            <literal>System.IO</literal> now exports two new functions,
            <literal>openTempFileWithDefaultPermissions</literal> and
            <literal>openBinaryTempFileWithDefaultPermissions</literal>.
          </para>
        </listitem>

        <listitem>
          <para>
            <literal>Data.Fixed</literal> now provides
            <literal>Data</literal> and <literal>Typeable</literal>
            instances for <literal>Fixed</literal>, and exports
            a number of new types:
            <literal>E0</literal>, <literal>Uni</literal>,
            <literal>E1</literal>, <literal>Deci</literal>,
            <literal>E2</literal>, <literal>Centi</literal>,
            <literal>E3</literal>, <literal>Milli</literal>,
            <literal>E9</literal> and <literal>Nano</literal>.
          </para>
        </listitem>

        <listitem>
          <para>
            In <literal>Control.Exception</literal>,
            <literal>BlockedOnDeadMVar</literal>
            has been renamed to
            <literal>BlockedIndefinitelyOnMVar</literal>
            and <literal>BlockedIndefinitely</literal>
            has been renamed to
            <literal>BlockedIndefinitelyOnSTM</literal>.
          </para>
        </listitem>

        <listitem>
          <para>
            The <literal>Control.OldException</literal> module has been
            deprecated.
          </para>
        </listitem>

        <listitem>
          <para>
            <literal>System.Posix.Internals.setNonBlockingFD</literal>
            now takes an additional <literal>Bool</literal> argument, so
            you can turn blocking back on again.
          </para>
        </listitem>

        <listitem>
          <para>
            A new function <literal>eof</literal> has been added to
            <literal>Text.ParserCombinators.ReadP</literal>.
          </para>
        </listitem>

        <listitem>
          <para>
            The <literal>Foreign.C.Types.CLDouble</literal> type has
            been removed. It was never correct, but just a duplicate of
            <literal>Foreign.C.Types.CDouble</literal>.
          </para>
        </listitem>

        <listitem>
          <para>
            In <literal>Data.Data</literal>, the
            <literal>StringRep</literal> and
            <literal>StringConstr</literal> constructors have been
            removed. The <literal>CharRep</literal> and
            <literal>CharConstr</literal> constructors should be used
            instead.
          </para>
        </listitem>

        <listitem>
          <para>
            In <literal>Data.Data</literal>,
            <literal>mkIntConstr</literal> has been deprecated in favour
            of the new <literal>mkIntegralConstr</literal>.
          </para>
        </listitem>

        <listitem>
          <para>
            In <literal>Data.Data</literal>,
            <literal>mkFloatConstr</literal> has been deprecated in
            favour of the new <literal>mkRealConstr</literal>.
          </para>
        </listitem>

        <listitem>
          <para>
            In <literal>Data.Data</literal>,
            <literal>mkNorepType</literal> has been deprecated in
            favour of the new <literal>mkNoRepType</literal>.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>bytestring</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 0.9.1.5 (was 0.9.1.4)
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>Cabal</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 1.8.0.0 (was 1.6.0.3)
          </para>
        </listitem>

        <listitem>
          <para>
            Many API changes. See the Cabal docs for more information.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>containers</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 0.3.0.0 (was 0.2.0.1)
          </para>
        </listitem>

        <listitem>
          <para>
            <literal>mapAccumRWithKey</literal> has been added to
            <literal>Data.IntMap</literal>.
          </para>
        </listitem>

        <listitem>
          <para>
            A <literal>Traversable</literal> instance has been added to
            <literal>Data.IntMap.IntMap</literal>.
          </para>
        </listitem>

        <listitem>
          <para>
            The types of <literal>Data.IntMap.intersectionWith</literal>
            and <literal>Data.IntMap.intersectionWithKey</literal> have
            been changed from
        </para>
<programlisting>
intersectionWith :: (a -> b -> a) -> IntMap a -> IntMap b -> IntMap a
intersectionWithKey :: (Key -> a -> b -> a) -> IntMap a -> IntMap b -> IntMap a
</programlisting>
        <para>
            to
        </para>
<programlisting>
intersectionWith :: (a -> b -> c) -> IntMap a -> IntMap b -> IntMap c
intersectionWithKey :: (Key -> a -> b -> c) -> IntMap a -> IntMap b -> IntMap c
</programlisting>
        </listitem>

        <listitem>
          <para>
            The types of <literal>Data.IntMap.findMin</literal>
            and <literal>Data.IntMap.findMax</literal> have
            been changed from
        </para>
<programlisting>
findMin :: IntMap a -> a
findMax :: IntMap a -> a
</programlisting>
        <para>
            to
        </para>
<programlisting>
findMin :: IntMap a -> (Int,a)
findMax :: IntMap a -> (Int,a)
</programlisting>
        </listitem>

        <listitem>
          <para>
            <literal>Data.Map</literal> now exports
            <literal>mapAccumRWithKey</literal>,
            <literal>foldrWithKey</literal>,
            <literal>foldlWithKey</literal> and
            <literal>toDescList</literal>.
          </para>
        </listitem>

        <listitem>
          <para>
            <literal>Data.Sequence</literal> now exports
            <literal>replicate</literal>,
            <literal>replicateA</literal>,
            <literal>replicateM</literal>,
            <literal>iterateN</literal>,
            <literal>unfoldr</literal>,
            <literal>unfoldl</literal>,
            <literal>scanl</literal>,
            <literal>scanl1</literal>,
            <literal>scanr</literal>,
            <literal>scanr1</literal>,
            <literal>tails</literal>,
            <literal>inits</literal>,
            <literal>takeWhileL</literal>,
            <literal>takeWhileR</literal>,
            <literal>dropWhileL</literal>,
            <literal>dropWhileR</literal>,
            <literal>spanl</literal>,
            <literal>spanr</literal>,
            <literal>breakl</literal>,
            <literal>breakr</literal>,
            <literal>partition</literal>,
            <literal>filter</literal>,
            <literal>sort</literal>,
            <literal>sortBy</literal>,
            <literal>unstableSort</literal>,
            <literal>unstableSortBy</literal>,
            <literal>elemIndexL</literal>,
            <literal>elemIndicesL</literal>,
            <literal>elemIndexR</literal>,
            <literal>elemIndicesR</literal>,
            <literal>findIndexL</literal>,
            <literal>findIndicesL</literal>,
            <literal>findIndexR</literal>,
            <literal>findIndicesR</literal>,
            <literal>foldlWithIndex</literal>,
            <literal>foldrWithIndex</literal>,
            <literal>mapWithIndex</literal>,
            <literal>zip</literal>,
            <literal>zipWith</literal>,
            <literal>zip3</literal>,
            <literal>zipWith3</literal>,
            <literal>zip4</literal> and
            <literal>zipWith4</literal>.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>directory</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 1.0.1.0 (was 1.0.0.3)
          </para>
        </listitem>

        <listitem>
          <para>
            A new function <literal>copyPermissions</literal> has been
            added to <literal>System.Directory</literal>.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>
        dph
        (dph-base, dph-par, dph-prim-interface, dph-prim-par,
        dph-prim-seq, dph-seq)
      </title>
      <itemizedlist>
        <listitem>
          <para>
            All the dph packages are version 0.4.0.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>extensible-exceptions</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 0.1.1.1 (was 0.1.1.0)
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>filepath</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 1.1.0.3 (was 1.1.0.2)
          </para>
        </listitem>

        <listitem>
          <para>
            The list of characters that are invalid in filenames on
            Windows now includes <literal>\</literal> (backslash).
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>ghc-binary</title>
      <itemizedlist>
        <listitem>
          <para>
            This is an internal package, and should not be used.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>ghc-prim</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 0.2.0.0 (was 0.1.0.0)
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>haskell98</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 1.0.1.1 (was 1.0.1.0)
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>hpc</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 0.5.0.4 (was 0.5.0.3)
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>integer-gmp</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 0.2.0.0 (was called integer, version 0.1.0.1)
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>integer-simple</title>
      <itemizedlist>
        <listitem>
          <para>
            This is a new boot package, version 0.1.0.0.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>old-locale</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 1.0.0.2 (was 1.0.0.1)
          </para>
        </listitem>

        <listitem>
          <para>
            Date and time in ISO8601 format are now separated by
            <literal>T</literal> rather than a space.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>old-time</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 1.0.0.3 (was 1.0.0.2)
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>packedstring</title>
      <itemizedlist>
        <listitem>
          <para>
            This is no longer a boot package.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>pretty</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 1.0.1.1 (was 1.0.1.0)
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>process</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 1.0.1.2 (was 1.0.1.1)
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>random</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 1.0.0.2 (was 1.0.0.1)
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>syb</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 0.1.0.2 (was 0.1.0.1)
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>template-haskell</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 2.4.0.0 (was 2.3.0.1)
          </para>
        </listitem>

        <listitem>
          <para>
            Support for <literal>inline</literal> and
            <literal>specialise</literal> pragmas has been added.
          </para>
        </listitem>

        <listitem>
          <para>
            Support for bang patterns has been added
          </para>
        </listitem>

        <listitem>
          <para>
            Support for kind annotations has been added
          </para>
        </listitem>

        <listitem>
          <para>
            Support for equality constraints has been added
          </para>
        </listitem>

        <listitem>
          <para>
            Support for type family declarations has been added
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>time</title>
      <itemizedlist>
        <listitem>
          <para>
            This is a new boot package, version 1.1.4.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>unix</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 2.4.0.0 (was 2.3.2.0)
          </para>
        </listitem>

        <listitem>
          <para>
            <literal>System.Posix.IO</literal> now exports
            <literal>fdReadBuf</literal> and
            <literal>fdWriteBuf</literal>.
          </para>
        </listitem>

        <listitem>
          <para>
            <literal>System.Posix.Process.executeFile</literal> now
            returns <literal>IO a</literal> instead of
            <literal>IO ()</literal>.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>Win32</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 2.2.0.1 (was 2.2.0.0)
          </para>
        </listitem>

        <listitem>
          <para>
            <literal>System.Win32.File</literal> now exports
            <literal>WIN32_FIND_DATA</literal>,
            <literal>FindData</literal>,
            <literal>getFindDataFileName</literal>,
            <literal>findFirstFile</literal>,
            <literal>findNextFile</literal> and
            <literal>findClose</literal>.
          </para>
        </listitem>

        <listitem>
          <para>
            <literal>System.Win32.Info</literal> now exports
            <literal>getCurrentDirectory</literal>,
            <literal>getTemporaryDirectory</literal>,
            <literal>getFullPathName</literal> and
            <literal>searchPath</literal>.
          </para>
        </listitem>

        <listitem>
          <para>
            <literal>System.Win32.Types</literal> now exports
            <literal>HRESULT</literal>.
          </para>
        </listitem>

        <listitem>
          <para>
            There is a new module <literal>System.Win32.Shell</literal>.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>
  </sect2>
</sect1>

