Author: lwall
Date: 2009-08-06 15:14:15 +0200 (Thu, 06 Aug 2009)
New Revision: 27882

Modified:
   docs/Perl6/Spec/S02-bits.pod
Log:
[S02] Note that coercion to Nil provides "loop else" functionality
Define what we mean by the Parcel type.


Modified: docs/Perl6/Spec/S02-bits.pod
===================================================================
--- docs/Perl6/Spec/S02-bits.pod        2009-08-06 05:34:41 UTC (rev 27881)
+++ docs/Perl6/Spec/S02-bits.pod        2009-08-06 13:14:15 UTC (rev 27882)
@@ -13,8 +13,8 @@
 
     Created: 10 Aug 2004
 
-    Last Modified: 17 Jun 2009
-    Version: 171
+    Last Modified: 6 Aug 2009
+    Version: 172
 
 This document summarizes Apocalypse 2, which covers small-scale
 lexical items and typological issues.  (These Synopses also contain
@@ -980,9 +980,25 @@
 as a null list into list context, and an empty capture into slice
 context.  A C<Nil> object may also carry failure information,
 but if so, the object behaves as a failure only in item context.
-Use C<Failure>/C<undef> when you want to return a hard failure that
-will not evaporate in list context.
+Use C<Failure> when you want to return a hard failure that
+will not evaporate in list context.  Casting to C<Nil> is one
+way of evaluating an expression and throwing the result away:
 
+    @inclist = map { $_ + 1 }, @list || Nil( warn 'Empty @list!' );
+
+    @inclist = do for @list || Nil( warn 'Empty @list!' ) {
+        $_ + 1;
+    }
+
+Or if you want to test the how many results you got back from
+the C<map> or C<for>:
+
+    @inclist = map { $_ + 1 }, @list or Nil( warn 'Empty @list!' );
+
+    @inclist = do for @list {
+        $_ + 1;
+    } or Nil( warn 'Empty @list!' )
+
 =head2 Immutable types
 
 Objects with these types behave like values, i.e. C<$x === $y> is true
@@ -1399,7 +1415,7 @@
 
 C<@x> may be bound to an object of the C<Array> class, but it may also
 be bound to any object that does the C<Positional> role, such as a
-C<List>, C<Seq>, C<Range>, C<Buf>, or C<Capture>.  The C<Positional>
+C<List>, C<Seq>, C<Range>, C<Buf>, C<Parcel>, or C<Capture>.  The C<Positional>
 role implies the ability to support C<< postcircumfix:<[ ]> >>.
 
 Likewise, C<%x> may be bound to any object that does the C<Associative>
@@ -1571,6 +1587,27 @@
 
 =item *
 
+A list of one or more objects may be grouped together by parentheses
+into a "parenthesis cell", or C<Parcel>.  This kind of list should
+not be confused with the flattening list context.  Instead, this is
+a raw syntactic list; no interpretation is made of the list without
+knowing what context it will be evaluated in.  For example, when
+you say:
+
+    (1,2,3,:mice<blind>)
+
+the result is a C<Parcel> object containing three C<Int> objects
+and a C<Pair> object, that is, four positional objects.  When, however,
+you say something like:
+
+    rhyme(1,2,3,:mice<blind>)
+
+the C<Parcel> is translated (at compile time, in this case)
+into a C<Capture> with 3 positionals and one named argument
+in preparation for binding.
+
+=item *
+
 An argument list may be captured into an object with backslashed parens:
 
     $args = \(1,2,3,:mice<blind>)

Reply via email to