UInt is just being handled individually by the core. You can override method Range by either mixin a role into your subset base type:
constant MyInt = Int but role { method Range { 1...10 } }; subset OneToTen of MyInt where ...; Or by subclassing Int: class MyInt is Int { method Range { ... } } Best regards, Vadim Belman > On Jan 28, 2020, at 10:03 AM, Simon Proctor <simon.proc...@gmail.com> wrote: > > So some recent conversations covered the Range method on numeric types like > Int > > So Int.Range gives the range of valid values -Inf^..^Inf which is neat. > > Then I thought I'd try UInt.Range and got 0..^Inf > > Ah Ha! Thinks I. I have a plan. What if I try this? > > my subset OneToTen of Int where { not .defined or 1 <= $_ <= 10 }; > say OneToTen.Range; > > And it gives ... > > -Inf^..^Inf > > And now I'm a bit confused. The Docs say the UInt is just a subset > https://docs.raku.org/type/UInt <https://docs.raku.org/type/UInt> > > So how does it have it's own Range? > > -- > Simon Proctor > Cognoscite aliquid novum cotidie > > http://www.khanate.co.uk/ <http://www.khanate.co.uk/>