I've been running into all sorts of problems trying to take S02 at its word
that Int supports arbitrary precision. It *sort of* does. But there are the
edge cases where it doesn't. This might just be something that's not there
yet, and I understand, but I thought I should report it.

If exponentiation (**) exceeds some pre-set limit, the result will be a Num.

 ok((10**100) ~~ Int, "Googol is of type Int"); # Fails
 ok((10.Int ** 100.Int) ~~ Int, "Googol is of type Int (cast)"); # Fails

The .Int method on an overly large integer literal will yield spurious
results if it's larger than the native type can store (but note that this
might be platform-specific):

 ok((1000000000000000000).Int > 0, "10^18 > 0"); # Passes
 ok((10000000000000000000).Int > 0, "10^19 > 0"); # Fails

The S02 is also very unclear on what the types of the various numeric
literals are. It would be really helpful if it made that really clear (not a
p6-compiler issue, I know).

When this happens, non-intuitive things can happen, type-wise:

$ ./perl6 -e 'my Int $x = 10000000000000000000'
[works fine]
$ ./perl6 -e 'my Int $x = 10000000000000000000 + 1'
Type check failed for assignment
  in '&infix:<=>' at line 1
  in main program body at line 1

Reply via email to