GHC now handles impredicative polymorphism and there are
changes to the way scoped type variables work; see
<ulink url="http://www.haskell.org/pipermail/glasgow-haskell-users/2006-January/009565.html"> Simon's e-mail</ulink>
- for more details.
+ for more details of the change, or <xref linkend="impredicative-polymorphism" /> for the documentation.
</para>
</listitem>
<listitem>
<programlisting>
f (x, y) | x `seq` False = undefined
| otherwise = [x,y]</programlisting>
+ See <xref linkend="sec-bang-patterns" /> for more details.
</para>
</listitem>
<listitem>
performance when a lot of memory is taken up by
<literal>STArray</literal>s, <literal>IOArray</literal>s,
<literal>STRef</literal>s or <literal>IORef</literal>s.
+ For more details see
+ <ulink url="http://hackage.haskell.org/trac/ghc/ticket/650">trac bug #650</ulink>.
</para>
</listitem>
<listitem>
<literal>MyIO <replaceable>t</replaceable></literal>
rather than just
<literal>IO <replaceable>t</replaceable></literal>.
+ See <xref linkend="ffi-newtype-io"/>
</para>
</listitem>
+ <listitem> <para> GHC's mechansim for deriving user-defined classes
+ for newtypes has been further generalised, to multi-parameter type
+ classes and higher-kinded types. See <xref
+ linkend="newtype-deriving"/>.
+ </para></listitem>
<listitem>
<para>
By default, pattern bindings in GHC are now monomorphic.
</listitem>
<listitem>
<para>
+ Linear implicit parameters have been scheduled for removal for some
+ time. In 6.6 we've removed them from the user manual, and they may
+ well disappear from the compiler itself in 6.6.1.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
It is now possible, with the <literal>-I</literal> RTS flag,
to control the amount of idle time that happens before a major
- GC is performed.
+ GC is performed. There is more detail in
+ <xref linkend="rts-options-gc" />.
</para>
</listitem>
<listitem>
</listitem>
<listitem>
<para>
- The <option>-split-objs</option> flag can now be used with
- <option>--make</option>, and hence can be used by cabal.
+ The <option>-split-objs</option> flag, which makes libraries
+ smaller, can now be used with <option>--make</option> and hence
+ can be used by cabal.
+ See <xref linkend="options-linker" /> for more information.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Template Haskell used to have limited support for type signatures in
+ patterns, but since that design is in flux for Haskell (let alone
+ Template Haskell), we've removed type signatures in patterns from
+ Template Haskell.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ GHC now supports postfix operators, as a simple generalisation of
+ left sections (<xref linkend="postfix-operators"/>).
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Parallel arrays, as enabled by <literal>-fparr</literal>, no
+ longer work. They'll be coming back shortly, in full glory.
</para>
</listitem>
</itemizedlist>
<itemizedlist>
<listitem>
<para>
- Version number 1.1.5 (was 1.1.4).
+ Version number 1.1.6 (was 1.1.4).
</para>
</listitem>
<listitem>
</listitem>
<listitem>
<para>
- Added <filename>cabal-setup</filename>, a user interface to
- building and installing Cabal packages.
- </para>
- </listitem>
- <listitem>
- <para>
- Added <filename>cabal-install</filename>, an automated
- installer for cabal packages.
- </para>
- </listitem>
- <listitem>
- <para>
- There is now a <literal>Network.Hackage</literal> hierarchy
- for code needed by hackage, the package server.
- </para>
- </listitem>
- <listitem>
- <para>
There are now modules
<literal>Distribution.Simple.<replaceable>compiler</replaceable></literal>
for each of <literal>GHC</literal>, <literal>NHC</literal>,
and <literal>System.Win32.Console</literal>.
</para>
</listitem>
- <listitem>
- <para>
- <literal>System.Win32</literal> no longer exports
- <literal>LCID</literal>,
- <literal>LANGID</literal>,
- <literal>SortID</literal>,
- <literal>SubLANGID</literal>,
- <literal>PrimaryLANGID</literal>,
- <literal>mAKELCID</literal>,
- <literal>lANGIDFROMLCID</literal>,
- <literal>sORTIDFROMLCID</literal>,
- <literal>mAKELANGID</literal>,
- <literal>pRIMARYLANGID</literal> or
- <literal>sUBLANGID</literal> from
- <literal>System.Win32.NLS</literal>.
- </para>
- </listitem>
</itemizedlist>
</sect3>
</sect2>
</sect3>
<sect3>
- <title>HaXml</title>
- <itemizedlist>
- <listitem>
- <para>
- Version number 1.16 (was 1.12.1).
- </para>
- </listitem>
- <listitem>
- <para>
- There are now lazy versions of the parsing modules
- <literal>Text.XML.HaXml.ParseLazy</literal>
- (a lazy non-validating XML parser) and
- <literal>Text.XML.HaXml.Html.ParseLazy</literal>
- (a lazy HTML parser).
- </para>
- </listitem>
- <listitem>
- <para>
- There are lazy versions of two of the example tools,
- <literal>CanonicaliseLazy</literal> and
- <literal>XtractLazy</literal>.
- </para>
- </listitem>
- <listitem>
- <para>
- <literal>Text.XML.HaXml.Haskell2Xml</literal> and
- <literal>Text.XML.HaXml.Xml2Haskell</literal> have been
- removed, with <literal>Text.XML.HaXml.XmlContent</literal>
- replacing them.
- You must now use <literal>{-! derive : XmlContent !-}</literal>
- rather than <literal>{-! derive :Haskell2Xml !-}</literal>
- to have instances derived for your classes.
- </para>
- </listitem>
- <listitem>
- <para>
- Now also provides the
- <literal>Text.ParserCombinators.HuttonMeijer</literal>
- monadic parser combinator library.
- </para>
- </listitem>
- <listitem>
- <para>
- Provides another new set of parser combinators, as well as a lazy
- variant, a variant that carries around state, and a
- variant that does both. The modules are
- <literal>Text.ParserCombinators.Poly</literal>,
- <literal>Text.ParserCombinators.PolyLazy</literal>,
- <literal>Text.ParserCombinators.PolyState</literal> and
- <literal>Text.ParserCombinators.PolyStateLazy</literal>
- respectively.
- It also provides
- <literal>Text.ParserCombinators.TextParser</literal>, which
- is the <literal>Poly</literal> parser combinators
- specialised for strings.
- </para>
- </listitem>
- <listitem>
- <para>
- Now provides a SAX-like parser in
- <literal>Text.XML.HaXml.SAX</literal>.
- </para>
- </listitem>
- <listitem>
- <para>
- Now provides a module
- <literal>Text.XML.HaXml.TypeMapping</literal>, which
- defines an explicit representation for Haskell types.
- This allows generation of a DTD from a Haskell value.
- </para>
- </listitem>
- <listitem>
- <para>
- The <literal>Posn</literal> type has been pulled out from
- <literal>Text.XML.HaXml.Lex</literal> into its own module
- <literal>Text.XML.HaXml.Posn</literal>. Some helper
- functions are also exported.
- </para>
- </listitem>
- <listitem>
- <para>
- The APIs to the pre-existing modules have also substantially
- changed.
- </para>
- </listitem>
- </itemizedlist>
- </sect3>
-
- <sect3>
<title>HGL</title>
<itemizedlist>
<listitem>
</sect3>
<sect3>
- <title>Japi</title>
- <itemizedlist>
- <listitem>
- <para>
- No change.
- </para>
- </listitem>
- </itemizedlist>
- </sect3>
-
- <sect3>
- <title>monads</title>
- <itemizedlist>
- <listitem>
- <para>
- Version number 2.0.1 (was 1.1).
- </para>
- </listitem>
- <listitem>
- <para>
- In <literal>Monad.Id</literal>, <literal>run</literal> has
- been renamed <literal>runId</literal>.
- </para>
- </listitem>
- <listitem>
- <para>
- The <literal>Monad.BackT</literal> module has been removed;
- use the new <literal>Monad.SearchT</literal> module instead.
- </para>
- </listitem>
- <listitem>
- <para>
- There is a new module <literal>Monad.ForEach</literal>
- containing a class <literal>ForEach</literal>, for
- applying a monadic function to each element in a container.
- It provides instances for <literal>[]</literal> and
- <literal>Maybe</literal>.
- </para>
- </listitem>
- <listitem>
- <para>
- The following combinators have been moved from
- <literal>Monad.Prelude</literal> to a new module
- <literal>Monad.Combinators</literal>:
- <literal>(@@)</literal>,
- <literal>(#)</literal>,
- <literal>(<#)</literal>,
- <literal>(<##)</literal>,
- <literal>concatMap</literal> and
- <literal>partitionM</literal>.
- <literal>Monad.Combinators</literal> also defines the
- following new combinators:
- <literal>ifM</literal>,
- <literal>whenM</literal>,
- <literal>andM</literal>,
- <literal>orM</literal>,
- <literal>allM</literal>,
- <literal>anyM</literal>,
- <literal>forEach2</literal>,
- <literal>forEach2_</literal>,
- <literal>forEach3</literal> and
- <literal>forEach3_</literal>, and re-exports
- <literal>Control.Monad</literal>.
- </para>
- </listitem>
- <listitem>
- <para>
- The modules
- <literal>Monad.Cont</literal>,
- <literal>Monad.Except</literal>,
- <literal>Monad.Reader</literal>,
- <literal>Monad.State</literal> and
- <literal>Monad.Writer</literal> have been removed, but their
- monad transformer counterparts remain. If you want the
- monads then just transform the identity monad instead.
- </para>
- </listitem>
- <listitem>
- <para>
- The <literal>Monad.ExceptT</literal> module now also exports
- runExceptWith and unsafeRunExcept. It also now defines an
- instance <literal>ContM (ExceptT x m)</literal>.
- </para>
- </listitem>
- <listitem>
- <para>
- In <literal>Monad.Prelude</literal>, the
- <literal>get</literal> method of the
- <literal>ReaderM</literal> module has been renamed
- <literal>getR</literal>. The <literal>local</literal> method
- has been removed with a new class
- <literal>ReadUpdM</literal>, with methods
- <literal>updateR</literal>
- and <literal>setR</literal>, taking its place.
- The <literal>letLocal</literal> function has also been removed.
- </para>
- </listitem>
- <listitem>
- <para>
- In <literal>Monad.Prelude</literal>,
- <literal>update</literal> has been made a method of
- <literal>StateM</literal>.
- The
- <literal>peek</literal> and <literal>poke</literal> methods
- have been renamed <literal>get</literal> and
- <literal>set</literal> respectively, and both have a default
- definition in terms of <literal>update</literal>.
- The <literal>poke_</literal> function has also been renamed
- <literal>set_</literal>.
- </para>
- </listitem>
- <listitem>
- <para>
- In <literal>Monad.Prelude</literal>,
- <literal>handle</literal> has been taken out of the
- <literal>ExceptM</literal> class and put into a new
- class <literal>HandlerM</literal> along with a new method
- <literal>checkExcept</literal>.
- There are also new functions <literal>withHandler</literal>
- and <literal>handle_</literal>.
- </para>
- </listitem>
- <listitem>
- <para>
- The <literal>TakeWriterM</literal> class has been renamed
- <literal>CollectorM</literal>, and rather than a single
- method <literal>takeFrom</literal> it has methods
- <literal>censor</literal> and <literal>collect</literal>
- with default definitions in terms of each other.
- </para>
- </listitem>
- <listitem>
- <para>
- <literal>Monad.Prelude</literal> defines a type
- <literal>Cont</literal> and functions
- <literal>returnCC</literal> and <literal>cJump</literal>.
- </para>
- </listitem>
- <listitem>
- <para>
- <literal>Monad.Prelude</literal> exports functions
- <literal>inReader</literal>,
- <literal>inWriter</literal>,
- <literal>inState</literal> and
- <literal>inExcept</literal>.
- These make it easy to turn a pure representation of an
- effectful computation into an actual computation.
- </para>
- </listitem>
- <listitem>
- <para>
- The <literal>zipWith3M</literal> and
- <literal>zipWith3M_</literal> functions have been removed
- from <literal>Monad.Prelude</literal>.
- </para>
- </listitem>
- <listitem>
- <para>
- <literal>Monad.Prelude</literal> now re-exports
- <literal>Monad.Combinators</literal> and
- <literal>Monad.ForEach</literal>, but no longer re-exports
- <literal>Monad</literal>.
- </para>
- </listitem>
- <listitem>
- <para>
- There is a new module <literal>Monad.Transformers</literal>
- which re-exports
- <literal>Monad.Id</literal>,
- <literal>Monad.ReaderT</literal>,
- <literal>Monad.WriterT</literal>,
- <literal>Monad.StateT</literal>,
- <literal>Monad.ExceptT</literal>,
- <literal>Monad.SearchT</literal> and
- <literal>Monad.ContT</literal>.
- </para>
- </listitem>
- </itemizedlist>
- </sect3>
-
- <sect3>
<title>mtl</title>
<itemizedlist>
<listitem>