txt: ## uint.md
  Subset UInt
  
  Unsigned integer (arbitrary-precision)
  
  The `UInt` is defined as a subset of [`Int`](/type/Int):
  
  ```raku
  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:
  
  ```raku
  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](# "go to top of document")[§](#typegraphrelations "direct link")
  
  Type relations for `UInt`
  
  
  
  raku-type-graph
  
  
  
  UInt
  UInt
  
  
  Any
  Any
  
  
  UInt->Any
  
  
  
  Mu
  Mu
  
  
  Any->Mu
  
  [Expand chart above](/assets/typegraphs/UInt.svg)
  