"Michael Lazzaro" <[EMAIL PROTECTED]> wrote in message
[EMAIL PROTECTED]">news:[EMAIL PROTECTED]...
> Of course, _I'd_ even prefer using <- and -> as the 'piping' operators,
> and having ~> or |> for pointy sub, because then $a->foo and $a.foo
> really _could_ be the same thing, 'cept for precedence.  But that's not
> gonna happen, and _I'm_ not gonna press it.  :-)

I wouldn't (and don't) give up so easily! The "->" syntax for anonymous
subs is cute: but it seems to be cute only in limited contexts -- those
where it is also being used as a (conceptual) piping operator.
Compare:

 $a = sub ($a, $b) { ... }
 $x = -> ($y, $z) { ... }

The pointy-arrow doesn't buy anything here.

But in a for loop:

 for 1,2,3,4 { ... }
 for 1,2,3,4 -> ($a,$b) {...}

its cuteness works because the brain sees it as a piping operator (even
though its not).

Perl6 is still Perl. We're allowed to do a bit of DWIMery in the parser,
if needed, to make the simple (common) cases work. So perhaps we
should define the C<for> in terms of pipelines. With some minor
syntax changes, we can free up the -> operator:

  for 1,2,3,4 ~> sub ($a,$b) { ... }

Sure, its not quite so cute. You could rename the C<sub> if desired
(for example, perhaps it could be spelt C<my> in this context, though
you'd need to work on the lexical scoping rules). The only remaining
magic would be to retrofit the basic C<for> to work.

And then we can replace the ~> with ->:

 for 1,2,3,4
    -> sub ($a, $b) { $a+$b }
    -> sub ($a) { $a**2 }
    -> { $^foo - 1 }
    -> print;

And this begs the question: what exactly does the C<for> contribute to
the semantics of the pipeline? What would C<map> (in void context)
do differently?


Dave.


Reply via email to