Changes for the new IO library, mainly base-package modules moving around
[ghc-hetmet.git] / docs / users_guide / using.xml
index d6eb6ed..478a6bc 100644 (file)
@@ -120,7 +120,7 @@ module X where
        <listitem>
          <para>Most non-mode flags fall into this category.  A dynamic flag
            may be used on the command line, in a
-           <literal>GHC_OPTIONS</literal> pragma in a source file, or set
+           <literal>OPTIONS_GHC</literal> pragma in a source file, or set
            using <literal>:set</literal> in GHCi.</para>
        </listitem>
       </varlistentry>
@@ -844,7 +844,8 @@ ghc -c Foo.hs</screen>
     <option>-fwarn-deprecated-flags</option>,
     <option>-fwarn-duplicate-exports</option>,
     <option>-fwarn-missing-fields</option>,
-    <option>-fwarn-missing-methods</option>, and
+    <option>-fwarn-missing-methods</option>,
+    <option>-fwarn-lazy-unlifted-bindings</option>, and
     <option>-fwarn-dodgy-foreign-imports</option>.  The following
     flags are
     simple ways to select standard &ldquo;packages&rdquo; of warnings:
@@ -918,6 +919,23 @@ ghc -c Foo.hs</screen>
     <variablelist>
 
       <varlistentry>
+       <term><option>-fwarn-unrecognised-pragmas</option>:</term>
+       <listitem>
+         <indexterm><primary><option>-fwarn-unrecognised-pragmas</option></primary>
+         </indexterm>
+         <indexterm><primary>warnings</primary></indexterm>
+         <indexterm><primary>pragmas</primary></indexterm>
+         <para>Causes a warning to be emitted when a
+         pragma that GHC doesn't recognise is used. As well as pragmas
+      that GHC itself uses, GHC also recognises pragmas known to be used
+      by other tools, e.g. <literal>OPTIONS_HUGS</literal> and
+      <literal>DERIVE</literal>.</para>
+
+         <para>This option is on by default.</para>
+       </listitem>
+      </varlistentry>
+
+      <varlistentry>
        <term><option>-fwarn-warnings-deprecations</option>:</term>
        <listitem>
          <indexterm><primary><option>-fwarn-warnings-deprecations</option></primary>
@@ -975,7 +993,7 @@ foreign import "&amp;f" f :: FunPtr t
        <listitem>
          <indexterm><primary><option>-fwarn-dodgy-imports</option></primary>
          </indexterm>
-         <para>Causes a warning to be emitted when a a datatype
+         <para>Causes a warning to be emitted when a datatype
       <literal>T</literal> is imported
       with all constructors, i.e. <literal>T(..)</literal>, but has been
       exported abstractly, i.e. <literal>T</literal>.</para>
@@ -983,6 +1001,20 @@ foreign import "&amp;f" f :: FunPtr t
       </varlistentry>
 
       <varlistentry>
+       <term><option>-fwarn-lazy-unlifted-bindings</option>:</term>
+       <listitem>
+         <indexterm><primary><option>-fwarn-lazy-unlifted-bindings</option></primary>
+         </indexterm>
+         <para>Causes a warning to be emitted when an unlifted type
+      is bound in a way that looks lazy, e.g.
+      <literal>where (I# x) = ...</literal>. Use
+      <literal>where !(I# x) = ...</literal> instead. This will be an
+      error, rather than a warning, in GHC 6.14.
+      </para>
+       </listitem>
+      </varlistentry>
+
+      <varlistentry>
        <term><option>-fwarn-duplicate-exports</option>:</term>
        <listitem>
          <indexterm><primary><option>-fwarn-duplicate-exports</option></primary></indexterm>
@@ -1158,6 +1190,11 @@ f foo = foo { x = 6 }
           typographical errors that turn into hard-to-find bugs, e.g.,
           in the inadvertent capture of what would be a recursive call in
           <literal>f = ... let f = id in ... f ...</literal>.</para>
+          <para>The warning is suppressed for names beginning with an underscore.  For example
+          <programlisting>
+             f x = do { _ignore &lt;- this; _ignore &lt;- that; return (the other) }
+          </programlisting>
+         </para>
        </listitem>
       </varlistentry>
 
@@ -1817,7 +1854,7 @@ f "2"    = 2
 
       <variablelist>
        <varlistentry>
-         <term><option>-N<replaceable>x</replaceable></option></term>
+         <term><option>-N<optional><replaceable>x</replaceable></optional></option></term>
          <listitem>
            <para><indexterm><primary><option>-N<replaceable>x</replaceable></option></primary><secondary>RTS option</secondary></indexterm>
              Use <replaceable>x</replaceable> simultaneous threads when
@@ -1829,9 +1866,19 @@ f "2"    = 2
              on a dual-core machine we would probably use
              <literal>+RTS -N2 -RTS</literal>.</para>
            
+            <para>Omitting <replaceable>x</replaceable>,
+              i.e. <literal>+RTS -N -RTS</literal>, lets the runtime
+              choose the value of <replaceable>x</replaceable> itself
+              based on how many processors are in your machine.</para>
+
+            <para>Be careful when using all the processors in your
+              machine: if some of your processors are in use by other
+              programs, this can actually harm performance rather than
+              improve it.</para>
+
             <para>Setting <option>-N</option> also has the effect of
-             setting <option>-g</option> (the number of OS threads to
-             use for garbage collection) to the same value.</para>
+              enabling the parallel garbage collector (see
+              <xref linkend="rts-options-gc" />).</para>
 
             <para>There is no means (currently) by which this value
              may vary after the program has started.</para>