[commit: ghc] master: Make Rank2Types and PolymorphicComponents into a synonym for RankNTypes (no deprecation) (26b2caf)

Simon Peyton Jones <[email protected]>
Newsgroups gmane.comp.lang.haskell.cvs.ghc
Message-ID <[email protected]>
Repository : ssh://darcs.haskell.org//srv/darcs/ghc

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/26b2caf02f8999f115de72f0cfa7b39c93b17296

>---------------------------------------------------------------

commit 26b2caf02f8999f115de72f0cfa7b39c93b17296
Author: Simon Peyton Jones <[email protected]>
Date:   Fri Oct 26 16:18:03 2012 +0100

    Make Rank2Types and PolymorphicComponents into a synonym for RankNTypes (no deprecation)
    
    There was a long thread on cvs-ghc which concluded that although it's
    the Right Thing to deprecate Rank2Types and PolymorphicComponents, in
    favour of RankNTypes, it would cause lots of busy-work for library
    authors and the pain isn't worth the gain.
    
    So this patch removes the deprecation, and documents the synonym-ity.

>---------------------------------------------------------------

 compiler/main/DynFlags.hs         |    8 ++++----
 docs/users_guide/flags.xml        |    6 ++----
 docs/users_guide/glasgow_exts.xml |   31 +++++++++++++------------------
 3 files changed, 19 insertions(+), 26 deletions(-)

diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs
index ac1fe9a..4cef95e 100644
--- a/compiler/main/DynFlags.hs
+++ b/compiler/main/DynFlags.hs
@@ -2457,11 +2457,11 @@ xFlags = [
   ( "CApiFFI",                          Opt_CApiFFI, nop ),
   ( "GHCForeignImportPrim",             Opt_GHCForeignImportPrim, nop ),
   ( "LiberalTypeSynonyms",              Opt_LiberalTypeSynonyms, nop ),
-  ( "PolymorphicComponents",            Opt_RankNTypes, 
-     deprecatedForExtension "RankNTypes" ),
-  ( "Rank2Types",                       Opt_RankNTypes, 
-     deprecatedForExtension "RankNTypes" ),
+
+  ( "PolymorphicComponents",            Opt_RankNTypes, nop),
+  ( "Rank2Types",                       Opt_RankNTypes, nop),
   ( "RankNTypes",                       Opt_RankNTypes, nop ),
+
   ( "ImpredicativeTypes",               Opt_ImpredicativeTypes, nop),
   ( "TypeOperators",                    Opt_TypeOperators, nop ),
   ( "ExplicitNamespaces",               Opt_ExplicitNamespaces, nop ),
diff --git a/docs/users_guide/flags.xml b/docs/users_guide/flags.xml
index 499c828..d670cb9 100644
--- a/docs/users_guide/flags.xml
+++ b/docs/users_guide/flags.xml
@@ -914,9 +914,7 @@
             <entry>Enable <link linkend="explicit-foralls">explicit universal quantification</link>.
               Implied by <option>-XScopedTypeVariables</option>,
               <option>-XLiberalTypeSynonyms</option>,
-              <option>-XRank2Types</option>,
               <option>-XRankNTypes</option>,
-              <option>-XPolymorphicComponents</option>,
               <option>-XExistentialQuantification</option>
             </entry>
             <entry>dynamic</entry>
@@ -925,13 +923,13 @@
           <row>
             <entry><option>-XPolymorphicComponents</option></entry>
             <entry>Enable <link linkend="universal-quantification">polymorphic components for data constructors</link>.</entry>
-            <entry>dynamic</entry>
+            <entry>dynamic, synonym for <option>-XRankNTypes</option></entry>
             <entry><option>-XNoPolymorphicComponents</option></entry>
           </row>
           <row>
             <entry><option>-XRank2Types</option></entry>
             <entry>Enable <link linkend="universal-quantification">rank-2 types</link>.</entry>
-            <entry>dynamic</entry>
+            <entry>dynamic, synonym for <option>-XRankNTypes</option></entry>
             <entry><option>-XNoRank2Types</option></entry>
           </row>
           <row>
diff --git a/docs/users_guide/glasgow_exts.xml b/docs/users_guide/glasgow_exts.xml
index 7607aa7..b036674 100644
--- a/docs/users_guide/glasgow_exts.xml
+++ b/docs/users_guide/glasgow_exts.xml
@@ -2071,9 +2071,7 @@ The following syntax is stolen:
 	Stolen (in types) by: <option>-XExplicitForAll</option>, and hence by
             <option>-XScopedTypeVariables</option>,
 	    <option>-XLiberalTypeSynonyms</option>,
-	    <option>-XRank2Types</option>,
 	    <option>-XRankNTypes</option>,
-	    <option>-XPolymorphicComponents</option>,
 	    <option>-XExistentialQuantification</option>
 	  </para></listitem>
       </varlistentry>
@@ -6384,20 +6382,12 @@ The function <literal>f3</literal> has a rank-3 type;
 it has rank-2 types on the left of a function arrow.
 </para>
 <para>
-GHC has three flags to control higher-rank types.  (All three imply <option>-XExplicitForAll</option>, <xref linkend="explicit-foralls"/>.)
-<itemizedlist>
-<listitem><para>
- <option>-XPolymorphicComponents</option>: data constructors (only) can have polymorphic argument types.
-</para></listitem>
-<listitem><para>
- <option>-XRank2Types</option>: any function (including data constructors) can have a rank-2 type.
-</para></listitem>
-<listitem><para>
- <option>-XRankNTypes</option>: any function (including data constructors) can have an arbitrary-rank type.
-That is,  you can nest <literal>forall</literal>s
+The language option <option>-XRankNTypes</option> (which implies <option>-XExplicitForAll</option>, <xref linkend="explicit-foralls"/>)
+enables higher-rank types.
+That is, you can nest <literal>forall</literal>s
 arbitrarily deep in function arrows.
-In particular, a forall-type (also called a "type scheme"),
-including an operational type class context, is legal:
+For example, a forall-type (also called a "type scheme"),
+including a type-class context, is legal:
 <itemizedlist>
 <listitem> <para> On the left or right (see <literal>f4</literal>, for example)
 of a function arrow </para> </listitem>
@@ -6407,15 +6397,20 @@ field type signatures.</para> </listitem>
 <listitem> <para> As the type of an implicit parameter </para> </listitem>
 <listitem> <para> In a pattern type signature (see <xref linkend="scoped-type-variables"/>) </para> </listitem>
 </itemizedlist>
-</para></listitem>
-</itemizedlist>
-Either <option>-XRank2Types</option> or <option>-XRankNTypes</option> is also required for any 
+The <option>-XRankNTypes</option> option is also required for any 
 type with a <literal>forall</literal> or
 context to the right of an arrow (e.g. <literal>f :: Int -> forall a. a->a</literal>, or
 <literal>g :: Int -> Ord a => a -> a</literal>).  Such types are technically rank 1, but
 are clearly not Haskell-98, and an extra flag did not seem worth the bother.
 </para>
 
+<para>
+The obselete language options <option>-XPolymorphicComponents</option> and <option>-XRank2Types</option>
+are synonyms for <option>-XRankNTypes</option>.  They used to specify finer distinctions that
+GHC no longer makes.  (They should really elicit a deprecation warning, but they don't, purely 
+to avoid the need to library authors to change their old flags specifciations.)
+</para>
+
 <sect3 id="univ">
 <title>Examples
 </title>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.