> How come last one should be same? Aren't they different types? I'd expect > `Array[Int] ~~ Positional[Numeric]` to give False
They are different types, but one could logically be considered a "subtype" of the other (and would be in some programming languages). E.g. in C#, a class Foo which takes a type parameter can define whether it wants to be, with regard to that parameter (using Perl 6 notation): covariant: Foo[Dog] ~~ Foo[Animal] contravariant: Foo[Animal] ~~ Foo[Dog] invariant: neither (Or at least that's how I understand it, I'm just starting to learn C#.) It appears that in Perl 6, currently only *Invariance* is supported for parameterized types. Whether that is a conscious design choice ("keeping it simple"), or something that might be extended in the future given sufficient demand/tuits, is something that jnthn should be able to answer, since if I'm not mistaken he's done much of the Perl 6 OO work and is also a C#/Java expert.