What I was pointing out is that the '*' operator outputs an error, and I was expecting that, while the '+' doesn't. Besides, the '+' delivers the correct result, which apparently indicates that the two operators are treated differently.
I was trying to understand whether this behavior is inherent to the Perl 6 type system or it's just a bug. On Sun, Sep 30, 2018, 12:27 JJ Merelo <jjmer...@gmail.com> wrote: > This works: > > my int32 $a = 3; my int32 $b = 7; say $a * $b # OUTPUT: «21» > > El dom., 30 sept. 2018 a las 11:28, Fernando Santagata (< > nando.santag...@gmail.com>) escribió: > >> Hi, >> >> I was hunting for a bug in my code, this one: >> >> my @a := CArray[int32].new: 6,3; >> say [+] @a; # it should be "say [+] @a.list;" >> >> That statement prints "9", while changing the '+' with a '*' it generates >> an error, as it should: >> >> Cannot resolve caller Numeric(NativeCall::Types::CArray[int32]: ); none >> of these signatures match: >> (Mu:U \v: *%_) >> >> Is this a bug, an inconsistency, or a necessary evil? >> > > It's difficult to say. Some conversion is taking place somewhere to > Numeric, and it's getting stuff it does not like. The type is > NativeCall::Types::CArray[int32].new and it's being considered a single > item; it's attempting conversion to Numeric. The thing here is that CArray > is actually not an Array; it inherits directly from Any: > > say @a.^mro; # OUTPUT: «((CArray[int32]) (CArray) (Any) (Mu))» > > It does include a `list` for convenience, but it's not, by itself, a list. > That operator does not do the conversion, but expects it to be a list, > hence the error. > > Hope this helps > > JJ >