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/>

Reply via email to