Author: larry
Date: Wed May 16 12:36:05 2007
New Revision: 14391

Modified:
   doc/trunk/design/syn/S02.pod
   doc/trunk/design/syn/S05.pod
   doc/trunk/design/syn/S12.pod

Log:
Now allow "returns" as synonym for "of" (TheDamian++)
Reconcile S05's view of Array smartmatch with S03's view


Modified: doc/trunk/design/syn/S02.pod
==============================================================================
--- doc/trunk/design/syn/S02.pod        (original)
+++ doc/trunk/design/syn/S02.pod        Wed May 16 12:36:05 2007
@@ -12,9 +12,9 @@
 
   Maintainer: Larry Wall <[EMAIL PROTECTED]>
   Date: 10 Aug 2004
-  Last Modified: 27 Apr 2007
+  Last Modified: 16 May 2007
   Number: 2
-  Version: 102
+  Version: 103
 
 This document summarizes Apocalypse 2, which covers small-scale
 lexical items and typological issues.  (These Synopses also contain
@@ -813,6 +813,7 @@
 container has an implementation type, including subroutines and modules.)
 The value type is stored as its C<of> property, while the implementation
 type of the container is just the object type of the container itself.
+The word C<returns> is allowed as an alias for C<of>.
 
 The value type specifies what kinds of values may be stored in the
 variable. A value type is given as a prefix or with the C<of> keyword:
@@ -833,6 +834,7 @@
 is declared, it is assumed to be the same as the C<of> type, if declared.
 
     sub get_pet() of Animal {...}       # of type, obviously
+    sub get_pet() returns Animal {...}  # of type
     our Animal sub get_pet() {...}      # of type
     sub get_pet() as Animal {...}       # as type
 
@@ -906,10 +908,12 @@
 subroutine pays attention to C<as>, and essentially coerces the return
 value to the indicated type, just as if you'd coerced each return expression.
 
-You may also specify the C<of> type as the C<of> trait:
+You may also specify the C<of> type as the C<of> trait (with C<returns>
+allowed as a synonym):
 
     my Hash of Array of Recipe sub get_book ($key) {...}
     my sub get_book ($key) of Hash of Array of Recipe {...}
+    my sub get_book ($key) returns Hash of Array of Recipe {...}
 
 =head2 Polymorphic types
 

Modified: doc/trunk/design/syn/S05.pod
==============================================================================
--- doc/trunk/design/syn/S05.pod        (original)
+++ doc/trunk/design/syn/S05.pod        Wed May 16 12:36:05 2007
@@ -14,9 +14,9 @@
    Maintainer: Patrick Michaud <[EMAIL PROTECTED]> and
                Larry Wall <[EMAIL PROTECTED]>
    Date: 24 Jun 2002
-   Last Modified: 27 Apr 2007
+   Last Modified: 16 May 2007
    Number: 5
-   Version: 58
+   Version: 59
 
 This document summarizes Apocalypse 5, which is about the new regex
 syntax.  We now try to call them I<regex> rather than "regular
@@ -3426,9 +3426,11 @@
 =item *
 
 Any non-compact array of mixed strings or objects can be matched
-against a regex:
+against a regex as long as you present them as an object with the C<Str>
+interface, which does not preclude the object having other interfaces
+such as C<Array>.  Normally you'd use C<cat> to generate such an object:
 
-    @array ~~ / foo <,> bar <elem>* /;
+    @array.cat ~~ / foo <,> bar <elem>* /;
 
 The special C<< <,> >> subrule matches the boundary between elements.
 The C<< <elem> >> assertion matches any individual array element.
@@ -3437,9 +3439,9 @@
 If the array elements are strings, they are concatenated virtually into
 a single logical string.  If the array elements are tokens or other
 such objects, the objects must provide appropriate methods for the
-kinds of subrules to match against.  It is an assertion error to match
+kinds of subrules to match against.  It is an assertion failure to match
 a string-matching assertion against an object that doesn't provide
-a string view.  However, pure object lists can be parsed as long as
+a stringified view.  However, pure object lists can be parsed as long as
 the match (including any subrules) restricts itself to assertions like:
 
      <.isa(Dog)>
@@ -3448,7 +3450,9 @@
 
 It is permissible to mix objects and strings in an array as long as they're
 in different elements.  You may not embed objects in strings, however.
-Any object may, of course, pretend to be a string element if it likes.
+Any object may, of course, pretend to be a string element if it likes,
+and so a C<Cat> object may be used as a substring with the same restrictions
+as in the main string.
 
 Please be aware that the warnings on C<.from> and C<.to> returning
 opaque objects goes double for matching against an array, where a
@@ -3456,13 +3460,21 @@
 (potentially) a position within a string of that array.  Do not
 expect to do math with such values.  Nor should you expect to be
 able to extract a substr that crosses element boundaries.
+[Conjecture: Or should you?]
 
 =item *
 
-To match against each element of an array, use a hyper operator:
+To match against every element of an array, use a hyper operator:
 
      @array».match($regex);
 
+=item *
+
+To match against any element of the array, it suffices to use ordinary
+smartmatching:
+
+    @array ~~ $regex;
+
 =back
 
 =for vim:set expandtab sw=4:

Modified: doc/trunk/design/syn/S12.pod
==============================================================================
--- doc/trunk/design/syn/S12.pod        (original)
+++ doc/trunk/design/syn/S12.pod        Wed May 16 12:36:05 2007
@@ -12,9 +12,9 @@
 
   Maintainer: Larry Wall <[EMAIL PROTECTED]>
   Date: 27 Oct 2004
-  Last Modified: 28 Apr 2007
+  Last Modified: 14 May 2007
   Number: 12
-  Version: 49
+  Version: 50
 
 =head1 Overview
 

Reply via email to