sorear/niecza

Multi dispatch ignores @, % and & type specifiers.

Opened this issue · 0 comments

@ enforces Positional type, % enforces Associative type and & enforces Callable type. However, those type constaints are ignored when deciding which method should be multi dispatched to when having more than one such method.

niecza> multi a(@a) { 'array' }
sub a(@a) { ... }
niecza> multi a(%a) { 'hash' } 
sub a(%a) { ... }
niecza> multi a(&a) { 'sub' }
sub a(Any &a) { ... }
niecza> a [1, 2, 3]
array
niecza> a {a => 'b'}
hash
niecza> a {say 42}
sub
niecza> multi a($a) { 'scalar' }
sub a(Any $a) { ... }
niecza> a 'abc'
scalar
niecza> a [1, 2, 3]
scalar
niecza> a {a => 'b'}
scalar
niecza> a {say 42}
scalar
niecza>