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