merge GHC HEAD
[ghc-hetmet.git] / docs / users_guide / using.xml
index 7ef2f2f..df01521 100644 (file)
@@ -783,18 +783,6 @@ ghc -c Foo.hs</screen>
     <variablelist>
       <varlistentry>
        <term>
-          <option>-n</option>
-          <indexterm><primary><option>-n</option></primary></indexterm>
-        </term>
-       <listitem>
-         <para>Does a dry-run, i.e. GHC goes through all the motions
-          of compiling as normal, but does not actually run any
-          external commands.</para>
-       </listitem>
-      </varlistentry>
-
-      <varlistentry>
-       <term>
           <option>-v</option>
           <indexterm><primary><option>-v</option></primary></indexterm>
         </term>
@@ -990,9 +978,11 @@ ghc -c Foo.hs</screen>
          <emphasis>not</emphasis> enabled by <option>-Wall</option>
          are
             <option>-fwarn-tabs</option>,
+            <option>-fwarn-incomplete-uni-patterns</option>,
             <option>-fwarn-incomplete-record-updates</option>,
             <option>-fwarn-monomorphism-restriction</option>,
-            <option>-fwarn-unused-do-bind</option>, and
+            <option>-fwarn-unrecognised-pragmas</option>,
+            <option>-fwarn-auto-orphans</option>,
             <option>-fwarn-implicit-prelude</option>.</para>
        </listitem>
       </varlistentry>
@@ -1175,6 +1165,21 @@ foreign import "&amp;f" f :: FunPtr t
       </varlistentry>
 
       <varlistentry>
+        <term><option>-fwarn-identities</option>:</term>
+       <listitem>
+          <indexterm><primary><option>-fwarn-identities</option></primary></indexterm>
+          <para>Causes the compiler to emit a warning when a Prelude numeric
+            conversion converts a type T to the same type T; such calls
+            are probably no-ops and can be omitted.  The functions checked for
+            are: <literal>toInteger</literal>,
+            <literal>toRational</literal>,
+            <literal>fromIntegral</literal>,
+            and <literal>realToFrac</literal>.
+          </para>
+       </listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><option>-fwarn-implicit-prelude</option>:</term>
         <listitem>
           <indexterm><primary><option>-fwarn-implicit-prelude</option></primary></indexterm>
@@ -1200,26 +1205,41 @@ foreign import "&amp;f" f :: FunPtr t
       </varlistentry>
 
       <varlistentry>
-       <term><option>-fwarn-incomplete-patterns</option>:</term>
+       <term><option>-fwarn-incomplete-patterns</option>, 
+              <option>-fwarn-incomplete-uni-patterns</option>:
+        </term> 
        <listitem>
          <indexterm><primary><option>-fwarn-incomplete-patterns</option></primary></indexterm>
+         <indexterm><primary><option>-fwarn-incomplete-uni-patterns</option></primary></indexterm>
          <indexterm><primary>incomplete patterns, warning</primary></indexterm>
          <indexterm><primary>patterns, incomplete</primary></indexterm>
 
-         <para>Similarly for incomplete patterns, the function
+          <para>The option <option>-fwarn-incomplete-patterns</option> warns 
+            about places where
+           a pattern-match might fail at runtime.  
+          The function
           <function>g</function> below will fail when applied to
           non-empty lists, so the compiler will emit a warning about
           this when <option>-fwarn-incomplete-patterns</option> is
-          enabled.</para>
-
+          enabled.
 <programlisting>
 g [] = 2
 </programlisting>
-
-         <para>This option isn't enabled by default because it can be
+         This option isn't enabled by default because it can be
           a bit noisy, and it doesn't always indicate a bug in the
           program.  However, it's generally considered good practice
-          to cover all the cases in your functions.</para>
+          to cover all the cases in your functions, and it is switched 
+          on by <option>-W</option>.</para>
+
+          <para>The flag <option>-fwarn-incomplete-uni-patterns</option> is
+          similar, except that it
+          applies only to lambda-expressions and pattern bindings, constructs
+         that only allow a single pattern:
+<programlisting>
+h = \[] -> 2
+Just k = f y
+</programlisting>
+          </para>
        </listitem>
       </varlistentry>
 
@@ -1268,6 +1288,39 @@ f foo = foo { x = 6 }
       </varlistentry>
 
       <varlistentry>
+       <term>
+          <option>-fwarn-missing-import-lists</option>:
+         <indexterm><primary><option>-fwarn-import-lists</option></primary></indexterm>
+         <indexterm><primary>missing import lists, warning</primary></indexterm>
+         <indexterm><primary>import lists, missing</primary></indexterm>
+        </term>
+       <listitem>
+
+         <para>This flag warns if you use an unqualified 
+            <literal>import</literal> declaration
+           that does not explicitly list the entities brought into scope. For 
+           example
+      </para>
+<programlisting>
+module M where
+  import X( f )
+  import Y
+  import qualified Z
+  p x = f x x
+</programlisting>
+        <para>
+          The <option>-fwarn-import-lists</option> flag will warn about the import
+         of <literal>Y</literal> but not <literal>X</literal>
+         If module <literal>Y</literal> is later changed to export (say) <literal>f</literal>,
+          then the reference to <literal>f</literal> in <literal>M</literal> will become
+         ambiguous.  No warning is produced for the import of <literal>Z</literal>
+         because extending <literal>Z</literal>'s exports would be unlikely to produce
+         ambiguity in <literal>M</literal>.
+        </para>
+       </listitem>
+      </varlistentry>
+
+      <varlistentry>
        <term><option>-fwarn-missing-methods</option>:</term>
        <listitem>
          <indexterm><primary><option>-fwarn-missing-methods</option></primary></indexterm>
@@ -1308,6 +1361,20 @@ f foo = foo { x = 6 }
       </varlistentry>
 
       <varlistentry>
+       <term><option>-fwarn-missing-local-sigs</option>:</term>
+       <listitem>
+         <indexterm><primary><option>-fwarn-missing-local-sigs</option></primary></indexterm>
+         <indexterm><primary>type signatures, missing</primary></indexterm>
+
+         <para>If you use the
+          <option>-fwarn-missing-local-sigs</option> flag GHC will warn
+          you about any polymorphic local bindings. As part of
+           the warning GHC also reports the inferred type. The
+          option is off by default.</para>
+       </listitem>
+      </varlistentry>
+
+      <varlistentry>
        <term><option>-fwarn-name-shadowing</option>:</term>
        <listitem>
          <indexterm><primary><option>-fwarn-name-shadowing</option></primary></indexterm>
@@ -1398,6 +1465,7 @@ f "2"    = 2
           e.g., the &lsquo;default default&rsquo; for Haskell 1.4 caused the
           otherwise unconstrained value <constant>1</constant> to be
           given the type <literal>Int</literal>, whereas Haskell 98
+          and later
           defaults it to <literal>Integer</literal>.  This may lead to
           differences in performance and behaviour, hence the
           usefulness of being non-silent about this.</para>
@@ -1630,37 +1698,12 @@ f "2"    = 2
             <option>-O</option>.</para>
          </listitem>
        </varlistentry>
-
-       <varlistentry>
-         <term>
-            <option>-Ofile &lt;file&gt;</option>:
-            <indexterm><primary>-Ofile &lt;file&gt; option</primary></indexterm>
-            <indexterm><primary>optimising, customised</primary></indexterm>
-          </term>
-         <listitem>
-           <para>(NOTE: not supported since GHC 4.x.  Please ask if
-           you're interested in this.)</para>
-           
-           <para>For those who need <emphasis>absolute</emphasis>
-            control over <emphasis>exactly</emphasis> what options are
-            used (e.g., compiler writers, sometimes :-), a list of
-            options can be put in a file and then slurped in with
-            <option>-Ofile</option>.</para>
-
-           <para>In that file, comments are of the
-            <literal>&num;</literal>-to-end-of-line variety; blank
-            lines and most whitespace is ignored.</para>
-
-           <para>Please ask if you are baffled and would like an
-           example of <option>-Ofile</option>!</para>
-         </listitem>
-       </varlistentry>
       </variablelist>
 
       <para>We don't use a <option>-O*</option> flag for day-to-day
       work.  We use <option>-O</option> to get respectable speed;
       e.g., when we want to measure something.  When we want to go for
-      broke, we tend to use <option>-O2 -fvia-C</option> (and we go for
+      broke, we tend to use <option>-O2</option> (and we go for
       lots of coffee breaks).</para>
 
       <para>The easiest way to see what <option>-O</option> (etc.)
@@ -2104,25 +2147,6 @@ f "2"    = 2
             </para>
           </listitem>
         </varlistentry>
-       <varlistentry>
-         <term><option>-qw</option></term>
-          <indexterm><primary><option>-qw</option></primary><secondary>RTS
-          option</secondary></indexterm>
-         <listitem>
-            <para>Migrate a thread to the current CPU when it is woken
-            up.  Normally when a thread is woken up after being
-            blocked it will be scheduled on the CPU it was running on
-            last; this option allows the thread to immediately migrate
-            to the CPU that unblocked it.</para> 
-            <para>The rationale for allowing this eager migration is
-            that it tends to move threads that are communicating with
-            each other onto the same CPU; however there are
-            pathalogical situations where it turns out to be a poor
-            strategy.  Depending on the communication pattern in your
-            program, it may or may not be a good idea.</para>
-          </listitem>
-        </varlistentry>
        </variablelist>
     </sect2>
       
@@ -2181,27 +2205,6 @@ f "2"    = 2
         </listitem>
       </varlistentry>
 
-      <varlistentry>
-       <term><option>-monly-[32]-regs</option>:</term>
-       <listitem>
-         <para>(x86 only)<indexterm><primary>-monly-N-regs
-          option (iX86 only)</primary></indexterm> GHC tries to
-          &ldquo;steal&rdquo; four registers from GCC, for performance
-          reasons; it almost always works.  However, when GCC is
-          compiling some modules with four stolen registers, it will
-          crash, probably saying:
-
-<screen>
-Foo.hc:533: fixed or forbidden register was spilled.
-This may be due to a compiler bug or to impossible asm
-statements or clauses.
-</screen>
-
-          Just give some registers back with
-          <option>-monly-N-regs</option>.  Try `3' first, then `2'.
-          If `2' doesn't work, please report the bug to us.</para>
-       </listitem>
-      </varlistentry>
     </variablelist>
 
   </sect1>
@@ -2218,9 +2221,8 @@ statements or clauses.
   <filename>.hcr</filename>. The Core format is described in <ulink url="../../core.pdf">
   <citetitle>An External Representation for the GHC Core Language</citetitle></ulink>, 
   and sample tools
-  for manipulating Core files (in Haskell) are in the GHC source distribution 
-  directory under <literal>utils/ext-core</literal>.  
-  Note that the format of <literal>.hcr</literal> 
+  for manipulating Core files (in Haskell) are available in the
+  <ulink url="http://hackage.haskell.org/package/extcore">extcore package on Hackage</ulink>.  Note that the format of <literal>.hcr</literal>
   files is <emphasis>different</emphasis> from the Core output format that GHC generates 
   for debugging purposes (<xref linkend="options-debugging"/>), though the two formats appear somewhat similar.</para>