Author: moritz
Date: 2009-07-27 20:54:44 +0200 (Mon, 27 Jul 2009)
New Revision: 27755

Modified:
   docs/Perl6/Spec/S06-routines.pod
   docs/Perl6/Spec/S29-functions.pod
Log:
get rid of want(), it's not implementable

See <http://www.nntp.perl.org/group/perl.perl6.language/2009/03/msg31372.html>
for a discussion where nobody stood up in defense of want().

Modified: docs/Perl6/Spec/S06-routines.pod
===================================================================
--- docs/Perl6/Spec/S06-routines.pod    2009-07-27 15:36:39 UTC (rev 27754)
+++ docs/Perl6/Spec/S06-routines.pod    2009-07-27 18:54:44 UTC (rev 27755)
@@ -2090,7 +2090,6 @@
     .context
     .caller
     .leave
-    .want
     .inline
     .package
     .file
@@ -2101,8 +2100,7 @@
 The C<.context> and C<.caller> methods work the same as the functions
 except that they are relative to the context supplied as invocant.
 The C<.leave> method can force an immediate return from the
-specified context.  The C<.want> method returns known smart-matchable
-characteristics of the specified context.
+specified context.
 
 The C<.inline> method says whether this block was entered implicitly
 by some surrounding control structure.  Any time you invoke a block or
@@ -2124,44 +2122,21 @@
 
 =head2 The C<want> function
 
-The C<want> function returns a C<Signature> object that contains
-information about the context in which the current block, closure,
-or subroutine was called.  The C<want> function is really just
-short for C<caller.want>.  (Note that this is what your current
-routine's caller wants from your routine, not necessarily the same as
-C<context.want> when you are embedded in a block within a subroutine.
-Use C<context.want> if that's what you want.)
+The C<want> function is gone. If you want context specific behavior,
+return an object instead that responds accordingly to the various contextual
+methods.
 
-As with normal function signatures, you can test the result of C<want> with a
-smart match (C<~~>) or a C<when>:
+(Conjecture: in future we might want to provide some syntactic sugar that
+makes it easier to create such objects. Or maybe a type that takes values
+or code references for the various contexts, so that you can write
 
-   given want {
-        when :($)       {...}   # called in item context
-        when :(*@)      {...}   # called in list context
-        when :($ is rw) {...}   # expected to return an lvalue
-        when :($,$)     {...}   # expected to return two values
-        ...
-    }
+   return ContextProxy.new:
+        Int   => 3,
+        item  => { @.list.join(', ') },
+        liste => { ...               },
+        ;
+or something similar.)
 
-Or use its shorthand methods to reduce line noise:
-
-    if    want.item      {...}  # called in non-lvalue item context
-    elsif want.list      {...}  # called in list context
-    elsif want.void      {...}  # called in void context
-    elsif want.rw        {...}  # expected to return an lvalue
-
-The C<.arity> and C<.count> methods also work here:
-
-    if want.arity > 2    {...}  # must return more than two values
-    if want.count > 2    {...}  # can return more than two values
-
-Their difference is that C<.arity> considers only mandatory parts,
-while C<.count> considers also optional ones, including C<*$>:
-
-    ($x, $y) = f();     # Within &f, want === :(*$?, *$?, *@)
-                        #            want.arity === 0
-                        #            want.count === 2
-
 =head2 The C<leave> function
 
 As mentioned above, a C<return> call causes the innermost surrounding

Modified: docs/Perl6/Spec/S29-functions.pod
===================================================================
--- docs/Perl6/Spec/S29-functions.pod   2009-07-27 15:36:39 UTC (rev 27754)
+++ docs/Perl6/Spec/S29-functions.pod   2009-07-27 18:54:44 UTC (rev 27755)
@@ -250,10 +250,6 @@
 
 See C<Synopsis 17: Concurrency> for more details.
 
-=item want
-
-See L<S06/The C<want> function>.
-
 =item die
 
 =item fail

Reply via email to