Graham Barr <[EMAIL PROTECTED]> writes:
> On Mon, Jan 20, 2003 at 07:27:56PM -0700, Luke Palmer wrote:
>> > What benefit does C<< <~ >> bring to the language?
>>
>> Again, it provides not just a "null operator" between to calls, but
>> rather a rewrite of method call syntax. So:
>>
>> map {...} <~ grep {...} <~ @boing;
>>
>> is not:
>>
>> map {...} grep {...} @boing;
>>
>> But rather:
>>
>> @boing.map({...}).grep({...});
>
> This is not a for or against, but there is something that has been
> bugging me about this.
>
> Currently in Perl5 it is possible to create a sub that has map/grep-like
> syntax, take a look at List::Util
>
> If the function form of map/grep were to be removed, which has been
> suggested, and the <~ form maps to methods. How would you go about
> defining a utility module similar to List::Util that uses the same
> syntax as map/grep but without making the subs methods on the global
> ARRAY package ?
Well, I very much hope that the function form won't be going away;
functional style is bloody useful dammit and I don't want to be forced
to add line noise just to make those who have a woody for
orthogonality happy. Anyhoo, if it *does* go away, then it should be
possible to set up an appropriate set of multiply dispatched generic
functions.
sub reduce ( &block, $init, *@array ) is multi {
@array.reduce(&block, $init);
}
sub reduce ( &block, $init, Collection $collection ) is multi {
$collection.reduce(&block, $init);
}
sub reduce ( $expr is qr/<Perl::term>/,
$init, *@array ) is immediate, is multi {
@array.reduce( $expr, $init);
}
sub reduce ( $expr is qr/Perl::term/,
$init, Collection $collection ) is immediate, is multi
{
$collection.reduce($expr, $init);
}
Though I'm sure Damian will be long eventually to correct my
syntax. I'm getting this weird feeling of deja vu though...
--
Piers