Improve documentation for -fwarn-incomplete-patterns
[ghc-hetmet.git] / docs / users_guide / using.xml
index 45f6438..a4c673c 100644 (file)
@@ -268,6 +268,22 @@ module X where
       </varlistentry>
       
       <varlistentry>
+       <term><filename>.ll</filename></term>
+       <listitem>
+         <para>An llvm-intermediate-language source file, usually
+          produced by the compiler.</para>
+       </listitem>
+      </varlistentry>
+
+      <varlistentry>
+       <term><filename>.bc</filename></term>
+       <listitem>
+         <para>An llvm-intermediate-language bitcode file, usually
+          produced by the compiler.</para>
+       </listitem>
+      </varlistentry>
+
+      <varlistentry>
        <term><filename>.s</filename></term>
        <listitem>
          <para>An assembly-language source file, usually produced by
@@ -973,7 +989,6 @@ ghc -c Foo.hs</screen>
          suspicious code.  The warnings that are
          <emphasis>not</emphasis> enabled by <option>-Wall</option>
          are
-            <option>-fwarn-simple-patterns</option>,
             <option>-fwarn-tabs</option>,
             <option>-fwarn-incomplete-record-updates</option>,
             <option>-fwarn-monomorphism-restriction</option>,
@@ -1160,6 +1175,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>
@@ -1191,14 +1221,15 @@ foreign import "&amp;f" f :: FunPtr t
          <indexterm><primary>incomplete patterns, warning</primary></indexterm>
          <indexterm><primary>patterns, incomplete</primary></indexterm>
 
-         <para>Similarly for incomplete patterns, the function
-          <function>g</function> below will fail when applied to
+          <para>Similarly for incomplete patterns, the functions
+          <function>g</function> and <function>h</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>
 
 <programlisting>
 g [] = 2
+h = \[] -> 2
 </programlisting>
 
          <para>This option isn't enabled by default because it can be
@@ -1360,28 +1391,6 @@ f "2"    = 2
       </varlistentry>
 
       <varlistentry>
-       <term><option>-fwarn-simple-patterns</option>:</term>
-       <listitem>
-         <indexterm><primary><option>-fwarn-simple-patterns</option></primary>
-         </indexterm>
-         <para>Causes the compiler to warn about lambda-bound
-         patterns that can fail, eg. <literal>\(x:xs)->...</literal>.
-         Normally, these aren't treated as incomplete patterns by
-         <option>-fwarn-incomplete-patterns</option>.</para>
-         <para>&ldquo;Lambda-bound patterns&rdquo; includes all places where there is a single pattern,
-           including list comprehensions and do-notation.  In these cases, a pattern-match 
-           failure is quite legitimate, and triggers filtering (list comprehensions) or
-           the monad <literal>fail</literal> operation (monads). For example:
-           <programlisting>
-             f :: [Maybe a] -> [a]
-             f xs = [y | Just y &lt;- xs]
-             </programlisting>
-           Switching on <option>-fwarn-simple-patterns</option> will elicit warnings about
-           these probably-innocent cases, which is why the flag is off by default. </para>
-       </listitem>
-      </varlistentry>
-
-      <varlistentry>
        <term><option>-fwarn-tabs</option>:</term>
        <listitem>
          <indexterm><primary><option>-fwarn-tabs</option></primary></indexterm>
@@ -1405,6 +1414,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>
@@ -1637,31 +1647,6 @@ 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