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

  <para>
    The significant changes to the various parts of the compiler are
    listed in the following sections.
  </para>

  <sect2>
    <title>User-visible compiler changes</title>
    <itemizedlist>
      <listitem>
        <para>
          The new QuasiQuotes language extension adds
          general quasi-quotation, as described in
          "Nice to be Quoted: Quasiquoting for Haskell"
          (Geoffrey Mainland, Haskell Workshop 2007).
          See <xref linkend="th-quasiquotation" /> for more information.
        </para>
      </listitem>
      <listitem>
        <para>
          The new ViewPatterns language extension allows
          &quot;view patterns&quot;. The syntax for view patterns
          is <literal>expression -> pattern</literal> in a pattern.
          For more information, see <xref linkend="view-patterns" />.
        </para>
      </listitem>
      <listitem>
        <para>
          GHC already supported (e op) postfix operators, but this
          support was enabled by default. Now you need to use the
          PostfixOperators language extension if you want it.
          See <xref linkend="postfix-operators" /> for more information
          on postfix operators.
        </para>
      </listitem>
      <listitem>
        <para>
          The new TransformListComp language extension enables
          implements generalised list comprehensions, as described in
          the paper "Comprehensive comprehensions" (Peyton Jones &amp;
          Wadler, Haskell Workshop 2007).
          For more information see
          <xref linkend="generalised-list-comprehensions" />.
        </para>
      </listitem>
      <listitem>
        <para>
          If you want to use impredicative types then you now need to
          enable the ImpredicativeTypes language extension.
          See <xref linkend="impredicative-polymorphism" /> for more
          information.
        </para>
      </listitem>
      <listitem>
        <para>
          FFI change: header files are now <emphasis>not
            used</emphasis> when compiling via C.
            The <option>-#include</option> flag,
            the <literal>includes</literal> field
            in <literal>.cabal</literal> files, and header files
            specified in a <literal>foreign import</literal>
            declaration all have no effect when compiling Haskell
          source code.</para>

        <para>This change has important ramifications if you are
          calling FFI functions that are defined by macros (or renamed
          by macros).  If you need to call one of these functions,
          then write a C wrapper for the function and call the wrapper
          using the FFI instead.  In this way, your code will work
          with GHC 6.10.1, and will also work
          with <option>-fasm</option> in older GHCs.</para>

        <para>This change was made for several reasons.
          Firstly, <option>-fvia-C</option> now behaves consistently
          with <option>-fasm</option>, which is important because we
          intend to stop compiling via C in the future.  Also, we
          don't need to worry about the interactions between header
          files, or CPP options necessary to expose certain functions
          from the system header files (this was becoming quite a
          headache).  We don't need to worry about needing header
          files when inlining FFI calls across module or package
          boundaries; calls can now be inlined freely.  One downside
          is that you don't get a warning from the C compiler when you
          call a function via the FFI at the wrong type.
        </para>

        <para>Another consequence of this change is that
          calling <emphasis>varargs</emphasis> functions (such
          as <literal>printf</literal>) via the FFI no longer works.
          It has never been officially supported (the FFI spec outlaws
          it), but in GHC 6.10.1 it may now really cause a crash on
          certain platforms.  Again, to call one of these functions
          use appropriate fixed-argument C wrappers.</para>
      </listitem>
      <listitem>
        <para>
          There is a new languages extension PackageImports which allows
          imports to be qualified with the package they should come
          from, e.g.
        </para>
<programlisting>
import "network" Network.Socket
</programlisting>
        <para>
          Note that this feature is not intended for general use, it
          was added for constructing backwards-compatibility packages
          such as the <literal>base-3.0.3.0</literal> package.  See
          <xref linkend="package-imports" /> for more details.
        </para>
      </listitem>
      <listitem>
        <para>
          In earlier versions of GHC, the recompilation checker didn't
          notice changes in other packages meant that recompilation is
          needed. This is now handled properly, using MD5 checksums of
          the interface ABIs.
        </para>
      </listitem>
      <listitem>
        <para>
          GHC now treats the Unicode "Letter, Other" class as lowercase
          letters. This is an arbitrary choice, but better than not
          allowing them in identifiers at all. This may be revisited
          by Haskell'.
        </para>
      </listitem>
      <listitem>
        <para>
          In addition to the <literal>DEPRECATED</literal> pragma, you
          can now attach arbitrary warnings to declarations with the new
          <literal>WARNING</literal> pragma. See
          <xref linkend="warning-deprecated-pragma" /> for more details.
        </para>
      </listitem>
      <listitem>
        <para>
          If GHC is failing due to <literal>-Werror</literal>, then it
          now emits a message telling you so.
        </para>
      </listitem>
      <listitem>
        <para>
          GHC now warns about unrecognised pragmas, as they are often
          caused by a typo. The
          <literal>-fwarn-unrecognised-pragmas</literal> controls
          whether this warning is emitted.
          The warning is enabled by default.
        </para>
      </listitem>
      <listitem>
        <para>
          There is a new flag
          <literal>-fwarn-dodgy-foreign-imports</literal> which controls
          a new warning about FFI delcarations of the form
        </para>
<programlisting>
foreign import "f" f :: FunPtr t
</programlisting>
        <para>
          on the grounds that it is probably meant to be
        </para>
<programlisting>
foreign import "&amp;f" f :: FunPtr t
</programlisting>
        <para>
          The warning is enabled by default.
        </para>
      </listitem>
      <listitem>
        <para>
          External core (output only) is working again.
        </para>
      </listitem>
      <listitem>
        <para>
          There is a new flag <literal>-dsuppress-uniques</literal> that
          makes GHC's intermediate core easier to read. This flag cannot
          be used when actually generating code.
        </para>
      </listitem>
      <listitem>
        <para>
          There is a new flag <literal>-dno-debug-output</literal> that
          suppresses all of the debug information when running a
          compiler built with the <literal>DEBUG</literal> option.
        </para>
      </listitem>
      <listitem>
        <para>
          A bug in earlier versions of GHC meant that sections didn't
          always need to be parenthesised, e.g.
          <literal>(+ 1, 2)</literal> was accepted. This has now been
          fixed.
        </para>
      </listitem>
      <listitem>
        <para>
          The <literal>-fspec-threshold</literal> flag has been replaced
          by <literal>-fspec-constr-threshold</literal> and
          <literal>-fliberate-case-threshold</literal> flags.
          The thresholds can be disabled by
          <literal>-fno-spec-constr-threshold</literal> and
          <literal>-fno-liberate-case-threshold</literal>.
        </para>
      </listitem>
      <listitem>
        <para>
          The new flag <literal>-fsimplifier-phases</literal>
          controls the number of simplifier phases run during
          optimisation. These are numbered from n to 1 (by default, n=2).
          Phase 0 is always run regardless of this flag.
        </para>
      </listitem>
      <listitem>
        <para>
          Simplifier phases can have an arbitrary number of tags
          assigned to them, and multiple phases can share the same tags.
          The tags can be used as arguments to the new flag
          <literal>-ddump-simpl-phases</literal>
          to specify which phases are to be dumped.
        </para>

        <para>
          For example,
          <literal>-ddump-simpl-phases=main</literal> will dump the
          output of phases 2, 1 and 0 of the initial simplifier run
          (they all share the "main" tag) while
          <literal>-ddump-simpl-phases=main:0</literal>
          will dump only the output of phase 0 of that run.
        </para>

        <para>
          At the moment, the supported tags are
          main (the main, staged simplifier run (before strictness)),
          post-worker-wrapper (after the w/w split),
          post-liberate-case  (after LiberateCase), and
          final (final clean-up run)
        </para>

        <para>
          The names are somewhat arbitrary and will change in the future.
        </para>
      </listitem>
      <listitem>
        <para>
          The <literal>-fno-method-sharing</literal> flag is now
          dynamic (it used to be static).
        </para>
      </listitem>
    </itemizedlist>
  </sect2>

  <sect2>
    <title>Deprecated flags</title>

    <itemizedlist>
      <listitem>
        <para>
          The new flag <literal>-fwarn-deprecated-flags</literal>,
          controls whether we warn about deprecated flags and language
          extensions. The warning is on by default.
        </para>
      </listitem>
      <listitem>
        <para>
          The following language extensions are now marked as
          deprecated; expect them to be removed in a future release:
        </para>
        <itemizedlist>
          <listitem>
            <para>
              <literal>RecordPuns</literal>
              (use <literal>NamedFieldPuns</literal> instead)
            </para>
          </listitem>
          <listitem>
            <para>
              <literal>PatternSignatures</literal>
              (use <literal>ScopedTypeVariables</literal> instead)
            </para>
          </listitem>
        </itemizedlist>
      </listitem>
      <listitem>
        <para>
          The following flags are now marked as deprecated;
          expect them to be removed in a future release:
        </para>
        <itemizedlist>
          <listitem>
            <para>
              <literal>-Onot</literal>
              (use <literal>-O0</literal> instead)
            </para>
          </listitem>
          <listitem>
            <para>
              <literal>-Wnot</literal>
              (use <literal>-w</literal> instead)
            </para>
          </listitem>
          <listitem>
            <para>
              <literal>-frewrite-rules</literal>
              (use <literal>-fenable-rewrite-rules</literal> instead)
            </para>
          </listitem>
          <listitem>
            <para>
              <literal>-no-link</literal>
              (use <literal>-c</literal> instead)
            </para>
          </listitem>
          <listitem>
            <para>
              <literal>-recomp</literal>
              (use <literal>-fno-force-recomp</literal> instead)
            </para>
          </listitem>
          <listitem>
            <para>
              <literal>-no-recomp</literal>
              (use <literal>-fforce-recomp</literal> instead)
            </para>
          </listitem>
          <listitem>
            <para>
              <literal>-syslib</literal>
              (use <literal>-package</literal> instead)
            </para>
          </listitem>
          <listitem>
            <para>
              <literal>-fth</literal>
              (use the <literal>TemplateHaskell</literal> language
              extension instead)
            </para>
          </listitem>
          <listitem>
            <para>
              <literal>-ffi</literal>, <literal>-fffi</literal>
              (use the <literal>ForeignFunctionInterface</literal>
              extension instead)
            </para>
          </listitem>
          <listitem>
            <para>
              <literal>-farrows</literal>
              (use the <literal>Arrows</literal> language
              extension instead)
            </para>
          </listitem>
          <listitem>
            <para>
              <literal>-fgenerics</literal>
              (use the <literal>Generics</literal> language
              extension instead)
            </para>
          </listitem>
          <listitem>
            <para>
              <literal>-fno-implicit-prelude</literal>
              (use the <literal>NoImplicitPrelude</literal> language
              extension instead)
            </para>
          </listitem>
          <listitem>
            <para>
              <literal>-fbang-patterns</literal>
              (use the <literal>BangPatterns</literal> language
              extension instead)
            </para>
          </listitem>
          <listitem>
            <para>
              <literal>-fno-monomorphism-restriction</literal>
              (use the <literal>NoMonomorphismRestriction</literal> language
              extension instead)
            </para>
          </listitem>
          <listitem>
            <para>
              <literal>-fmono-pat-binds</literal>
              (use the <literal>MonoPatBinds</literal> language
              extension instead)
            </para>
          </listitem>
          <listitem>
            <para>
              <literal>-fextended-default-rules</literal>
              (use the <literal>ExtendedDefaultRules</literal> language
              extension instead)
            </para>
          </listitem>
          <listitem>
            <para>
              <literal>-fimplicit-params</literal>
              (use the <literal>ImplicitParams</literal> language
              extension instead)
            </para>
          </listitem>
          <listitem>
            <para>
              <literal>-fscoped-type-variables</literal>
              (use the <literal>ScopedTypeVariables</literal> language
              extension instead)
            </para>
          </listitem>
          <listitem>
            <para>
              <literal>-fparr</literal>
              (use the <literal>PArr</literal> language
              extension instead)
            </para>
          </listitem>
          <listitem>
            <para>
              <literal>-fallow-overlapping-instances</literal>
              (use the <literal>OverlappingInstances</literal> language
              extension instead)
            </para>
          </listitem>
          <listitem>
            <para>
              <literal>-fallow-undecidable-instances</literal>
              (use the <literal>UndecidableInstances</literal> language
              extension instead)
            </para>
          </listitem>
          <listitem>
            <para>
              <literal>-fallow-incoherent-instances</literal>
              (use the <literal>IncoherentInstances</literal> language
              extension instead)
            </para>
          </listitem>
          <listitem>
            <para>
              <literal>-optdep-s</literal>
              (use <literal>-dep-suffix</literal> instead)
            </para>
          </listitem>
          <listitem>
            <para>
              <literal>-optdep-f</literal>
              (use <literal>-dep-makefile</literal> instead)
            </para>
          </listitem>
          <listitem>
            <para>
              <literal>-optdep-w</literal>
              (has no effect)
            </para>
          </listitem>
          <listitem>
            <para>
              <literal>-optdep--include-prelude</literal>
              (use <literal>-include-pkg-deps</literal> instead)
            </para>
          </listitem>
          <listitem>
            <para>
              <literal>-optdep--include-pkg-deps</literal>
              (use <literal>-include-pkg-deps</literal> instead)
            </para>
          </listitem>
          <listitem>
            <para>
              <literal>-optdep--exclude-module</literal>
              (use <literal>-exclude-module</literal> instead)
            </para>
          </listitem>
          <listitem>
            <para>
              <literal>-optdep-x</literal>
              (use <literal>-exclude-module</literal> instead)
            </para>
          </listitem>
        </itemizedlist>
      </listitem>
      <listitem>
        <para>
          The following flags have been removed:
        </para>
        <itemizedlist>
          <listitem>
            <para>
              <literal>-no-link-chk</literal>
              (has been a no-op since at least 6.0)
            </para>
          </listitem>
          <listitem>
            <para>
              <literal>-fruntime-types</literal>
              (has not been used for years)
            </para>
          </listitem>
          <listitem>
            <para>
              <literal>-fhardwire-lib-paths</literal>
              (use <literal>-dynload sysdep</literal>)
            </para>
          </listitem>
        </itemizedlist>
      </listitem>
      <listitem>
        <para>
          The <literal>-unreg</literal> flag, which was used to build
          unregisterised code with a registerised compiler, has been
          removed. Now you need to build an unregisterised compiler
          if you want to build unregisterised code.
        </para>
      </listitem>
    </itemizedlist>
  </sect2>

  <sect2>
    <title>GHC API changes</title>

    <itemizedlist>
      <listitem>
        <para>
          There is now a Ghc Monad used to carry around GHC's
          Session data. This Monad also provides exception handling
          functions.
        </para>
      </listitem>
      <listitem>
        <para>
          It is now possible to get the raw characters corresponding to
          each token the lexer outputs, and thus to reconstruct the
          original file.
        </para>
      </listitem>
      <listitem>
        <para>
          GHCi implicitly brings all exposed modules into scope with
          qualified module names. There is a new flag
          <literal>-fimplicit-import-qualified</literal>
          that controls this behaviour, so other GHC API clients can
          specify whether or not they want it.
        </para>
      </listitem>
      <listitem>
        <para>
          There is now haddock documentation for much of the GHC API.
        </para>
      </listitem>
    </itemizedlist>
  </sect2>

  <sect2>
    <title>GHCi changes</title>

    <itemizedlist>
      <listitem>
        <para>
          You can now force GHCi to interpret a module, rather than
          loading its compiled code, by prepending a * character to its
          name, e.g.
        </para>
<programlisting>
Prelude> :load *A
Compiling A                ( A.hs, interpreted )
*A>
</programlisting>
      </listitem>
      <listitem>
        <para>
          By default, GHCi will not print bind results, e.g.
        </para>
<programlisting>
Prelude&gt; c &lt;- return 'c'
Prelude&gt; 
</programlisting>
        <para>
          does not print <literal>'c'</literal>. Use
          <literal>-fprint-bind-result</literal> if you want the old
          behaviour.
        </para>
      </listitem>
      <listitem>
        <para>
          GHCi now uses editline, rather than readline, for input.
          This shouldn't affect its behaviour.
        </para>
      </listitem>
      <listitem>
        <para>
          The GHCi prompt history is now saved in
          <literal>~/.ghc/ghci_history</literal>.
        </para>
      </listitem>
      <listitem>
        <para>
          GHCi now uses libffi to make FFI calls, which means that the
          FFI now works in GHCi on a much wider range of platforms
          (all those platforms that libffi supports).
        </para>
      </listitem>
    </itemizedlist>
  </sect2>

  <sect2>
    <title>Runtime system changes</title>
    
    <itemizedlist>
      <listitem>
        <para>
          The garbage collector can now use multiple threads in parallel.
          The new <literal>-g<replaceable>n</replaceable></literal> RTS
          flag controls it, e.g. run your program with
          <literal>+RTS -g2 -RTS</literal> to use 2 threads.
          The <option>-g</option> option is implied by the
          usual <option>-N</option> option, so normally there will be
          no need to specify it separately, although occasionally it
          is useful to turn it off with <option>-g1</option>.</para>
        <para>Do let us know if you experience strange effects,
          especially an increase in GC time when using the parallel GC
          (use <option>+RTS -s -RTS</option> to measure GC time).
          See <xref linkend="rts-options-gc" /> for more details.</para>
      </listitem>
      <listitem>
        <para>
          It is now possible to generate a heap profile without
          recompiling your program for profiling.  Run the program
          with <option>+RTS -hT</option> to generate a basic heap
          profile, and use <command>hp2ps</command> as usual to
          convert the heap profile into a <literal>.ps</literal> file
          for viewing.  See <xref linkend="rts-profiling" /> for more
          details.
        </para>
      </listitem>
      <listitem>
        <para>
          If the user presses control-C while running a Haskell program
          then the program gets an asynchronous UserInterrupt exception.
        </para>
      </listitem>
      <listitem>
        <para>
          We now ignore SIGPIPE by default.
        </para>
      </listitem>
      <listitem>
        <para>
          The <literal>-S</literal> and <literal>-s</literal> RTS flags
          now send their output to stderr, rather than
          <literal><replaceable>prog</replaceable>.stat</literal>,
          by default.
        </para>
      </listitem>
      <listitem>
        <para>
          The new <literal>-vg</literal> RTS flag provides some RTS trace
          messages even in the non-debug RTS variants.
        </para>
      </listitem>
    </itemizedlist>
  </sect2>

  <sect2>
    <title>runghc</title>

    <itemizedlist>
      <listitem>
        <para>
          runghc now uses the compiler that it came with to run the
          code, rather than the first compiler that it finds on the
          PATH.
        </para>
      </listitem>
      <listitem>
        <para>
          If the program to run does not have a <literal>.lhs</literal>
          extension then runghc now treats it as a <literal>.hs</literal>
          file. In particular, this means that programs without an
          extension now work.
        </para>
      </listitem>
      <listitem>
        <para>
          <literal>runghc foo</literal> will now work if
          <literal>foo.hs</literal> or <literal>foo.lhs</literal> exists.
        </para>
      </listitem>
      <listitem>
        <para>
          runghc can now take the code to run from stdin.
        </para>
      </listitem>
    </itemizedlist>
  </sect2>

  <sect2>
    <title>ghc-pkg</title>

    <itemizedlist>
      <listitem>
        <para>ghc-pkg will refuse to unregister a package on which
          other packages depend, unless
          the <option>&ndash;&ndash;force</option> option is also
          supplied.</para>
      </listitem>
      <listitem>
        <para>
          ghc-pkg now has a <literal>-no-user-package-conf</literal>
          flag which instructs it to ignore the user's personal
          package.conf.
        </para>
      </listitem>
      <listitem>
        <para>
          ghc-pkg no longer allows you to register two packages that
          differ in case only.
        </para>
      </listitem>
      <listitem>
        <para>
          ghc-pkg no longer allows you to register packages which have
          unversioned dependencies.
        </para>
      </listitem>
      <listitem>
        <para>
          There is a new command <literal>dump</literal> which is
          similar to <literal>describe '*'</literal>, but in a format
          that is designed to be parsable by other tools.
        </para>
      </listitem>
    </itemizedlist>
  </sect2>

  <sect2>
    <title>Haddock</title>

    <itemizedlist>
      <listitem>
        <para>
          Haddock 2 now comes with GHC.
        </para>
      </listitem>
    </itemizedlist>
  </sect2>

  <sect2>
    <title>DPH changes</title>

    <itemizedlist>
      <listitem>
        <para>
          DPH is now an extralib.
        </para>
      </listitem>
      <listitem>
        <para>
          There is a new flag <literal>-Odph</literal> that sets the
          flags recommended when using DPH. Currently it is equivalent
          to
          <literal>
            -O2 -fno-method-sharing -fdicts-cheap
            -fmax-simplifier-iterations20 -fno-spec-constr-threshold
          </literal>
        </para>
      </listitem>
      <listitem>
        <para>
          There are now flags <literal>-fdph-seq</literal> and
          <literal>-fdph-par</literal> for selecting which DPH backend
          to use.
        </para>
      </listitem>
      <listitem>
        <para>
          The <literal>-fflatten</literal> flag has been removed. It
          never worked and has now been superceded by vectorisation.
        </para>
      </listitem>
    </itemizedlist>
  </sect2>

  <sect2> 
    <title>Boot Libraries</title>

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

    <sect3>
      <title>base</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 4.0.0.0 (was 3.0.2.0)
          </para>
        </listitem>
        <listitem>
          <para>
            We also ship a base version 3.0.3.0, so legacy code should
            continue to work.
          </para>
        </listitem>
        <listitem>
          <para>The <literal>Show</literal> instance
            for <literal>Ratio</literal> now puts spaces around
            the <literal>%</literal>, as required by Haskell 98.</para>
        </listitem>
        <listitem>
          <para>
            There is a new module <literal>Control.Category</literal>.
          </para>
        </listitem>
        <listitem>
          <para>
            <literal>&gt;&gt;&gt;</literal> is no longer a method of the
            <literal>Arrow</literal> class; instead
            <literal>Category</literal> is a superclass of
            <literal>Arrow</literal>.
          </para>
        </listitem>
        <listitem>
          <para>
            <literal>pure</literal> is no longer a method of the
            <literal>Arrow</literal> class; use <literal>arr</literal>
            instead.
          </para>
        </listitem>
        <listitem>
          <para>
            <literal>Control.Exception</literal> now uses extensible
            exceptions. The old style of exceptions are still available
            in <literal>Control.OldException</literal>, but we expect to
            remove them in a future release.
          </para>
        </listitem>
        <listitem>
          <para>
            There is a new function
            <literal>System.Exit.exitSuccess :: IO a</literal>
            analogous to the existing
            <literal>System.Exit.exitFailure :: IO a</literal>.
          </para>
        </listitem>
        <listitem>
          <para>
            There are new functions
            <literal>Data.Either.lefts :: [Either a b] -&gt; [a]</literal>,
            <literal>Data.Either.rights :: [Either a b] -&gt; [b]</literal>
            and
            <literal>
            Data.Either.partitionEithers :: [Either a b] -&gt; ([a], [b])
            </literal>.
          </para>
        </listitem>
        <listitem>
          <para>
            The new function
            <literal>Data.List.subsequences :: [a] -&gt; [[a]]</literal>
            gives all sublists of a list, e.g.
            <literal>
            subsequences "abc" ==
            ["","a","b","ab","c","ac","bc","abc"]
            </literal>.
          </para>
        </listitem>
        <listitem>
          <para>
            The new function
            <literal>Data.List.permutations :: [a] -&gt; [[a]]</literal>
            gives all permutations of a list, e.g.
            <literal>
            permutations "abc" ==
            ["abc","bac","cba","bca","cab","acb"]
            </literal>.
          </para>
        </listitem>
        <listitem>
          <para>
            The new functions
            <literal>Data.Traversable.mapAccumL</literal> and
            <literal>Data.Traversable.mapAccumR</literal> generalise their
            <literal>Data.List</literal> counterparts to work on any
            <literal>Traversable</literal> type.
          </para>
        </listitem>
        <listitem>
          <para>
            The new function
            <literal>Control.Exception.blocked :: IO Bool</literal>
            tells you whether or not exceptions are blocked (as controlled
            by <literal>Control.Exception.(un)block</literal>).
          </para>
        </listitem>
        <listitem>
          <para>
            There is a new function
            <literal>traceShow :: Show a => a -> b -> b</literal> in
            <literal>Debug.Trace</literal>.
          </para>
        </listitem>
        <listitem>
          <para>
            The type of <literal>Control.Monad.forever</literal> has
            been generalised from
            <literal>Monad m =&gt; m a -&gt; m ()</literal> to
            <literal>Monad m =&gt; m a -&gt; m b</literal>.
          </para>
        </listitem>
        <listitem>
          <para>
            The new value <literal>GHC.Exts.maxTupleSize</literal>
            tells you the largest tuple size that can be used. This is
            mostly of use in Template Haskell programs.
          </para>
        </listitem>
        <listitem>
          <para>
            <literal>GHC.Exts</literal> now exports
            <literal>Down(..)</literal>,
            <literal>groupWith</literal>,
            <literal>sortWith</literal> and
            <literal>the</literal> which are used in the desugaring of
            generalised comprehensions.
          </para>
        </listitem>
        <listitem>
          <para>
            <literal>GHC.Exts</literal> no longer exports the
            <literal>Integer</literal> internals. If you want them then
            you need to get them directly from the
            new <literal>integer</literal> package.
          </para>
        </listitem>
        <listitem>
          <para>
            The new function <literal>GHC.Conc.threadStatus</literal>
            allows you to ask whether a thread is running, blocked on
            an MVar, etc.
          </para>
        </listitem>
        <listitem>
          <para>
            The <literal>Data.Generics</literal> hierarchy has been
            moved to a new package <literal>syb</literal>.
          </para>
        </listitem>
        <listitem>
          <para>
            The <literal>GHC.Prim</literal> and
            <literal>GHC.PrimopWrappers</literal> modules have been
            moved into a new <literal>ghc-prim</literal> package.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>bytestring</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 0.9.0.1.2 (was 0.9.0.1.1)
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>Cabal</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 1.6.0.1 (was 1.2.4.0)
          </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.2.0.0 (was 0.1.0.2)
          </para>
        </listitem>
        <listitem>
          <para>
            Various result type now use <literal>Maybe</literal> rather
            than allowing any Monad.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>directory</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 1.0.0.2 (was 1.0.0.1)
          </para>
        </listitem>
        <listitem>
          <para>
            No longer defines the UNICODE CPP symbol for packages that
            use it.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>editline</title>
      <itemizedlist>
        <listitem>
          <para>
            This is a new bootlib, version 0.2.1.0.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>filepath</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 1.1.0.1 (was 1.1.0.0)
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>ghc-prim</title>
      <itemizedlist>
        <listitem>
          <para>
            This is a new bootlib, version 0.1.0.0.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

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

    <sect3>
      <title>hpc</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 0.5.0.2 (was 0.5.0.1)
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>integer</title>
      <itemizedlist>
        <listitem>
          <para>
            This is a new bootlib, version 0.1.0.0.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

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

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

    <sect3>
      <title>packedstring</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 0.1.0.1 (was 0.1.0.0)
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>pretty</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 1.0.1.0 (was 1.0.0.0)
          </para>
        </listitem>
        <listitem>
          <para>
            There is a new combinator
            <literal>zeroWidthText :: String -&gt; Doc</literal>
            for printing things like ANSI escape sequences.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>process</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 1.0.1.0 (was 1.0.0.1)
          </para>
        </listitem>
        <listitem>
          <para>
            The <literal>System.Process</literal> API has been overhauled.
            The new API is a superset of the old API, however.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

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

    <sect3>
      <title>readline</title>
      <itemizedlist>
        <listitem>
          <para>
            This is no longer a bootlib; editline replaces it.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>syb</title>
      <itemizedlist>
        <listitem>
          <para>
            This is a new bootlib, version 0.1.0.0.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>template-haskell</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 2.3.0.0 (was 2.2.0.0)
          </para>
        </listitem>
        <listitem>
          <para>
            The datatypes now have support for Word primitives.
          </para>
        </listitem>
        <listitem>
          <para>
            <literal>currentModule :: Q String</literal> has been
            replaced with
            <literal>location :: Q Loc</literal>, where
            <literal>Loc</literal> is a new datatype.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>unix</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 2.3.1.0 (was 2.3.0.1)
          </para>
        </listitem>
        <listitem>
          <para>
            The <literal>System.Posix.Terminal.BaudRate</literal> type
            now includes <literal>B57600</literal> and
            <literal>B115200</literal> constructors.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>

    <sect3>
      <title>Win32</title>
      <itemizedlist>
        <listitem>
          <para>
            Version number 2.2.0.0 (was 2.1.1.1)
          </para>
        </listitem>
        <listitem>
          <para>
            No longer defines the UNICODE CPP symbol for packages that
            use it.
          </para>
        </listitem>
      </itemizedlist>
    </sect3>
  </sect2>
</sect1>

