The UInt is defined as a subset of Int:

my subset UInt of Int where {not .defined or $_ >= 0};

Consequently, it cannot be instantiated or subclassed; however, that shouldn't affect most normal uses.

Some examples of its behavior and uses:

say UInt ~~ Int; # OUTPUT: «True␤»
my UInt $u = 0xffff_ffff_ffff_ffff_ffff_ffff_ffff_ffff; # 64-bit unsigned value
say $u.base(16); # OUTPUT: «FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF␤» (32 digits)
++$u;
say $u.base(16); # OUTPUT: «100000000000000000000000000000000␤» (33 digits!)
my Int $i = $u;
say $i.base(16); # same as above
say $u.^name;    # OUTPUT: «Int␤» - UInt is a subset, so the type is still Int.
say $i.^name;    # OUTPUT: «Int␤»
# Difference in assignment
my UInt $a = 5;  # nothing wrong
my UInt $b = -5; # Exception about failed type check
my UInt $c = 0;
--$c;            # Exception again
CATCH { default { put .^name, ': ', .Str } };
# OUTPUT: «X::TypeCheck::Assignment: Type check failed in assignment to $b; expected UInt but got Int (-5)␤»

# Non-assignment operations are fine
my UInt $d = 0;
say $d - 3;      # OUTPUT: «-3␤»

Typegraph§

Type relations for UInt
raku-type-graph UInt UInt Any Any UInt->Any Mu Mu Any->Mu

Expand chart above