Document GADTSyntax extension
[ghc-hetmet.git] / docs / users_guide / glasgow_exts.xml
index 172d6ff..ddbd2ec 100644 (file)
@@ -450,43 +450,6 @@ Indeed, the bindings can even be recursive.
       </para>
    </sect2>
 
-    <sect2 id="new-qualified-operators">
-      <title>New qualified operator syntax</title>
-
-      <para>A new syntax for referencing qualified operators is
-        planned to be introduced by Haskell', and is enabled in GHC
-        with
-        the <option>-XNewQualifiedOperators</option><indexterm><primary><option>-XNewQualifiedOperators</option></primary></indexterm>
-        option.  In the new syntax, the prefix form of a qualified
-        operator is
-        written <literal><replaceable>module</replaceable>.(<replaceable>symbol</replaceable>)</literal>
-        (without NewQualifiedOperators this would
-        be <literal>(<replaceable>module</replaceable>.<replaceable>symbol</replaceable>)</literal>),
-        and the infix form is
-        written <literal>`<replaceable>module</replaceable>.(<replaceable>symbol</replaceable>)`</literal>
-        (without NewQualifiedOperators this would
-        be <literal>`<replaceable>module</replaceable>.<replaceable>symbol</replaceable>`</literal>.
-        For example:
-<programlisting>
-  add x y = Prelude.(+) x y
-  subtract y = (`Prelude.(-)` y)
-</programlisting>
-        The new form of qualified operators is intended to regularise
-        the syntax by eliminating odd cases
-        like <literal>Prelude..</literal>.  For example,
-        when <literal>NewQualifiedOperators</literal> is on, it is possible to
-        write the enumerated sequence <literal>[Monday..]</literal>
-        without spaces, whereas without NewQualifiedOperators this would be a
-        reference to the operator &lsquo;<literal>.</literal>&lsquo;
-        from module <literal>Monday</literal>.</para>
-
-      <para>When <option>-XNewQualifiedOperators</option> is on, the old
-        syntax for qualified operators is not accepted, so this
-        option may cause existing code to break.</para>
-
-    </sect2>
-        
-
     <!-- ====================== HIERARCHICAL MODULES =======================  -->
 
 
@@ -2471,7 +2434,8 @@ declarations.  Define your own instances!
 <sect2 id="gadt-style">
 <title>Declaring data types with explicit constructor signatures</title>
 
-<para>GHC allows you to declare an algebraic data type by 
+<para>When the <literal>GADTSyntax</literal> extension is enabled,
+GHC allows you to declare an algebraic data type by
 giving the type signatures of constructors explicitly.  For example:
 <programlisting>
   data Maybe a where
@@ -4041,18 +4005,21 @@ The willingness to be overlapped or incoherent is a property of
 the <emphasis>instance declaration</emphasis> itself, controlled by the
 presence or otherwise of the <option>-XOverlappingInstances</option> 
 and <option>-XIncoherentInstances</option> flags when that module is
-being defined.  Neither flag is required in a module that imports and uses the
-instance declaration.  Specifically, during the lookup process:
+being defined.  Specifically, during the lookup process:
 <itemizedlist>
 <listitem><para>
-An instance declaration is ignored during the lookup process if (a) a more specific
-match is found, and (b) the instance declaration was compiled with 
-<option>-XOverlappingInstances</option>.  The flag setting for the
-more-specific instance does not matter.
+If the constraint being looked up matches two instance declarations IA and IB,
+and
+<itemizedlist>
+<listitem><para>IB is a substitution instance of IA (but not vice versa);
+that is, IB is strictly more specific than IA</para></listitem>
+<listitem><para>either IA or IB was compiled with <option>-XOverlappingInstances</option></para></listitem>
+</itemizedlist>
+then the less-specific instance IA is ignored.
 </para></listitem>
 <listitem><para>
 Suppose an instance declaration does not match the constraint being looked up, but
-does unify with it, so that it might match when the constraint is further 
+does <emphasis>unify</emphasis> with it, so that it might match when the constraint is further
 instantiated.  Usually GHC will regard this as a reason for not committing to
 some other constraint.  But if the instance declaration was compiled with
 <option>-XIncoherentInstances</option>, GHC will skip the "does-it-unify?" 
@@ -4062,18 +4029,6 @@ check for that declaration.
 These rules make it possible for a library author to design a library that relies on 
 overlapping instances without the library client having to know.  
 </para>
-<para>
-If an instance declaration is compiled without
-<option>-XOverlappingInstances</option>,
-then that instance can never be overlapped.  This could perhaps be
-inconvenient.  Perhaps the rule should instead say that the
-<emphasis>overlapping</emphasis> instance declaration should be compiled in
-this way, rather than the <emphasis>overlapped</emphasis> one.  Perhaps overlap
-at a usage site should be permitted regardless of how the instance declarations
-are compiled, if the <option>-XOverlappingInstances</option> flag is
-used at the usage site.  (Mind you, the exact usage site can occasionally be
-hard to pin down.)  We are interested to receive feedback on these points.
-</para>
 <para>The <option>-XIncoherentInstances</option> flag implies the
 <option>-XOverlappingInstances</option> flag, but not vice versa.
 </para>
@@ -8242,7 +8197,7 @@ Here is an example:
 <para>
 Use the debug flag <option>-ddump-simpl-stats</option> to see what rules fired.
 If you need more information, then <option>-ddump-rule-firings</option> shows you
-each individual rule firing in detail.
+each individual rule firing and <option>-ddump-rule-rewrites</option> also shows what the code looks like before and after the rewrite.
 </para>
 
 <sect2>
@@ -8827,7 +8782,8 @@ If you add <option>-dppr-debug</option> you get a more detailed listing.
 
 <listitem>
 <para>
- Use <option>-ddump-rule-firings</option> to see in great detail what rules are being fired.
+ Use <option>-ddump-rule-firings</option> or <option>-ddump-rule-rewrites</option>
+to see in great detail what rules are being fired.
 If you add <option>-dppr-debug</option> you get a still more detailed listing.
 </para>
 </listitem>