Luke wrote: > My interpretation (which may be totally off, as I don't have any > confirmation that anybody else is thinking the same way I am) is that > the synopsis is wrong, and commutivity of ~~ is a happy coincidence > wherever it exists. The way I've been thinking about ~~ is just as > the following object-oriented sugar: > > role Pattern { > method match(Any $x) {...} > } > sub infix:<~~> (Any $x, Pattern $y) { > $y.match($x); > } > > And then the interpretation of ~~ is determined by its right-hand side.
Heavens, I hope not! The whole point of ~~ is that it's dispatched multimorphically, *not* polymorphically. So you get the most appropriate matching behaviour for the *combination* of arguments. And I've always imagined that it's commutative for the same reason == and eq are communative: because that's the only thing that makes sense. When you're comparing two apples (or an apple and a handgrenade), it shouldn't matter which of the two is in your left hand, and which is in your right. Damian