Dave Storrs <[EMAIL PROTECTED]> writes: > On Mon, Dec 16, 2002 at 08:26:25PM +0000, Piers Cawley wrote: >> Dave Storrs <[EMAIL PROTECTED]> writes: >> > On Mon, Dec 16, 2002 at 06:47:39PM +0000, Piers Cawley wrote: >> >> Michael Lazzaro <[EMAIL PROTECTED]> writes: > >> I haven't been arguing against his syntax for adding L to R >> pipelines, but against the damage he proposes doing to R to L syntax. > > Fair enough. I'd like to find a way for neither of them to go away, > or get damaged. > >> > However, I think that L2R is valuable enough that it should make it >> > into the language, and I don't have a better suggestion. >> >> Well, L2R is really easy: >> >> @ary.map({...}).grep(rx/.../).whatever(...); >> >> For ugly values of 'really easy' of course. > > Yick. I'll definitely agree on the "ugly" part. > > However, I'm curious--and I know this has been hashed over, I'm just > not clear on where we stand at this point--are you proposing that map, > grep, and whatever would be methods on Array? Because that seems > unnecessarily restrictive. And yet, having them be methods of Object > seems a bit TOO generous. > > Perhaps the answer is to have an inheritance tree that goes > > Object > | > v > Collection > | > +-Array > | > +-Hash > | > +-etc (maybe Set, or maybe junction) > > ...and map, grep, etc, would be elements of Collection, overriden in > sensible ways by the derived classes? > > This is an off-the-cuff idea and I may well be full of it.
I've suggested a full blown Collection hierarchy elsewhere, but this would be an ideal place for it. Then you can set up the function style variants with just a couple of generic functions: sub grep ( Object $selector, @*args ) { @args.grep($selector) } sub grep ( Object $selector, Collection $coll ) { $coll.grep($selector) } You know, the more I monkey with multi dispatch stuff, the more I like it.