</listitem>
<listitem>
<para>
- GHC's modules are now also bundled into a
- <literal>ghc</literal> package, allowing programs to make use
- of GHC as a library. The interface has not yet been properly
- designed, so is subject to change.
- </para>
- </listitem>
- <listitem>
- <para>
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>
</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. There is more detail in
- <xref linkend="rts-options-gc" />.
+ If the program is idle for a certain amount of time then GHC
+ will now take the opportunity to do a major garbage collection.
+ The amount of idle time that is required before that happens
+ is controlled by the new <literal>-I</literal> RTS flag.
+ There is more detail in <xref linkend="rts-options-gc" />.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ It is now possible to control the frequency that the RTS clock
+ ticks at with the new <literal>-V</literal> RTS flag. This is
+ normally handled automatically by other flags, but this flag
+ is needed if you want to increase the resolution of the time
+ profiler.
+ For more details see <xref linkend="rts-options-misc" />.
</para>
</listitem>
<listitem>
</listitem>
<listitem>
<para>
- The <option>-split-objs</option> flag, which makes libraries
- smaller, can now be used with <option>--make</option> and hence
+ The <option>-split-objs</option> flag, which when used to compile
+ libraries means executables using the library will be 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>
<literal>inline</literal> which, provided the RHS is visible
to the compiler, forcibly inlines its argument.
Otherwise, it acts like <literal>id</literal>.
+ For more details, see <xref linkend="special-ids" />.
</para>
</listitem>
<listitem>
<literal>GHC.Exts</literal> now provides a function
<literal>lazy</literal> which forces GHC to think that its
argument is lazy in its first argument.
+ For more details, see <xref linkend="special-ids" />.
</para>
</listitem>
<listitem>
</sect2>
<sect2>
+ <title>GHC As A Library</title>
+ <para>
+ Version number 6.6.
+ </para>
+ <para>
+ The internal modules of GHC are now available as a library, package
+ name <literal>ghc</literal>.
+ The interface has not been designed with use by other programs
+ in mind, so expect the API to vary radically in future
+ releases.
+ </para>
+ <para>
+ An introduction to using the library can be found
+ <ulink url="http://haskell.org/haskellwiki/GHC/As_a_library">on the wiki</ulink>.
+ </para>
+ </sect2>
+
+ <sect2>
<title>Internal changes</title>
<itemizedlist>
<listitem>
<!-- ====================== Generalised algebraic data types ======================= -->
<sect1 id="gadt">
-<title>Generalised Algebraic Data Types</title>
+<title>Generalised Algebraic Data Types (GADTs)</title>
-<para>Generalised Algebraic Data Types (GADTs) generalise ordinary algebraic data types by allowing you
+<para>Generalised Algebraic Data Types generalise ordinary algebraic data types by allowing you
to give the type signatures of constructors explicitly. For example:
<programlisting>
data Term a where
eval (If b e1 e2) = if eval b then eval e1 else eval e2
eval (Pair e1 e2) = (eval e1, eval e2)
</programlisting>
-These and many other examples are given in papers by Hongwei Xi, and Tim Sheard.
+These and many other examples are given in papers by Hongwei Xi, and
+Tim Sheard. There is a longer introduction
+<ulink url="http://haskell.org/haskellwiki/GADT">on the wiki</ulink>,
+and Ralf Hinze's
+<ulink url="http://www.informatik.uni-bonn.de/~ralf/publications/With.pdf">Fun with phantom types</ulink> also has a number of examples. Note that papers
+may use different notation to that implemented in GHC.
</para>
<para>
The rest of this section outlines the extensions to GHC that support GADTs.
<para>Tell the linker to split the single object file that
would normally be generated into multiple object files,
one per top-level Haskell function or type in the module.
- We use this feature for building GHC's libraries libraries
+ This only makes sense for libraries, where it means that
+ executables linked against the library are smaller as they only
+ link against the object files that they need. However, assembling
+ all the sections separately is expensive, so this is slower than
+ compiling normally.
+ We use this feature for building GHC's libraries
(warning: don't use it unless you know what you're
doing!).</para>
</listitem>