[commit: ghc] master: Improve documentation of record wildcards (67a6ade)
git at git.haskell.org
git at git.haskell.org
Mon Aug 25 15:18:21 UTC 2014
Repository : ssh://git@git.haskell.org/ghc
On branch : master
Link : http://ghc.haskell.org/trac/ghc/changeset/67a6ade91b77fb2252ebdad34a934d9fb54eb43d/ghc
>---------------------------------------------------------------
commit 67a6ade91b77fb2252ebdad34a934d9fb54eb43d
Author: Simon Peyton Jones <simonpj at microsoft.com>
Date: Mon Aug 25 16:18:03 2014 +0100
Improve documentation of record wildcards
In particular mention that they aren't allowed for record updates.
Triggered by Trac #9437
>---------------------------------------------------------------
67a6ade91b77fb2252ebdad34a934d9fb54eb43d
docs/users_guide/glasgow_exts.xml | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/docs/users_guide/glasgow_exts.xml b/docs/users_guide/glasgow_exts.xml
index a6c43b8..befaf4d 100644
--- a/docs/users_guide/glasgow_exts.xml
+++ b/docs/users_guide/glasgow_exts.xml
@@ -2325,7 +2325,7 @@ f (C {a = 1, ..}) = b + c + d
More details:
<itemizedlist>
<listitem><para>
-Wildcards can be mixed with other patterns, including puns
+Record wildcards in patterns can be mixed with other patterns, including puns
(<xref linkend="record-puns"/>); for example, in a pattern <literal>C {a
= 1, b, ..})</literal>. Additionally, record wildcards can be used
wherever record patterns occur, including in <literal>let</literal>
@@ -2338,7 +2338,7 @@ defines <literal>b</literal>, <literal>c</literal>, and
</para></listitem>
<listitem><para>
-Record wildcards can also be used in expressions, writing, for example,
+Record wildcards can also be used in an expression, when constructing a record. For example,
<programlisting>
let {a = 1; b = 2; c = 3; d = 4} in C {..}
</programlisting>
@@ -2352,7 +2352,15 @@ the same as the omitted field names.
</para></listitem>
<listitem><para>
-The "<literal>..</literal>" expands to the missing
+Record wildcards may <emphasis>not</emphasis> be used in record <emphasis>updates</emphasis>. For example this
+is illegal:
+<programlisting>
+f r = r { x = 3, .. }
+</programlisting>
+</para></listitem>
+
+<listitem><para>
+For both pattern and expression wildcards, the "<literal>..</literal>" expands to the missing
<emphasis>in-scope</emphasis> record fields.
Specifically the expansion of "<literal>C {..}</literal>" includes
<literal>f</literal> if and only if:
@@ -2369,6 +2377,8 @@ the variable <literal>f</literal> is in scope unqualified,
apart from the binding of the record selector itself.
</para></listitem>
</itemizedlist>
+These rules restrict record wildcards to the situations in which the user
+could have written the expanded version.
For example
<programlisting>
module M where
More information about the ghc-commits
mailing list