On Thu, Nov 30, 2006 at 09:43:40AM +0100, TSa wrote:
: [EMAIL PROTECTED] wrote:
: > $_ $x Type of Match Implied Matching Code
: > ====== ===== ===================== =============
: >+ Set Set members identical match if $_ === $x
: > + Array Set array equivalent to set match if Set($_) === $x
: Isn't it better to define these in terms of Bags? I mean with
: Bag a supertype of Set the dispatch should go to cases
: &infix<===>:(Bag,Bag), &infix<===>:(Bag,Set), &infix<===>:(Set,Bag)
: and &infix<===>:(Set,Set).
I think that most Perl programmers would rather view Sets and Bags through
the Hash lens, so I think I'm going to try to avoid mentioning Sets and Bags
in the smartmatching table entirely, and only differentiate KeyHash, if
we differentiate anything. In this view all of Set, Bag, KeySet and KeyBag
are really KeyHash, which is a Hash that is being used primarily for its
keys. Set and Bag just happen to be constant values of KeySet and KeyBag
that also happen to override === and .WHICH to provide value rather
than object semantics.
I think a consequence of this view is that (x) ops are all key-based set
ops unless you explicitly make sure both sides are bags. But it's still
early enough in the morning that I've not thought this through entirely...
What I do know this early is that we can't turn the hardwired
smartmatch table into a complete crossbar of every type combination
we can think up now and in the future. For learnability we've got
to keep it linear somehow. That's my main motivation for trying to
smash Set and Bag into being variants of the Hash role.