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

Reply via email to