Carl Mäsak (via RT) wrote:
# New Ticket Created by "Carl Mäsak"
# Please include the string: [perl #64922]
# in the subject line of all future correspondence about this issue.
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=64922 >
This might be in RT already, but I didn't find it, so...
<ihrd> rakudo: multi foo (@a) { 1 }; multi foo ($a, %h?) { 2 }; say
foo(<1 2 3>);
<p6eval> rakudo 69b318: OUTPUT«Ambiguous dispatch to multi 'foo'.
Ambiguous candidates had signatures::(Positional.new() @a):(Any $a,
Associative.new() %h?) [...]
* masak submits rakudobug
As for arity, both methods can match. But the first candidate has a
type constraint Positional on its first parameter, so it should be
narrower than the second one, which doesn't.
It's not so clear cut that this is a bug. Positional is a role, and is
done by some things (like List, Array, etc), but doesn't have a
relationship with Any in any way. The default parameter type is Any.
Thus if you try Positional ~~ Any, you'll get false (and vice versa -
they are tied types so far as the dispatcher is concerned).
Anyway, the dispatcher is behaving as I would have expected in terms of
considering those candidates tied. I do agree it isn't very dwim-y, but
nothing occurs to me right away that we could do in order to make it
dwim more...
Jonathan