No statically typed language can have beautiful numbers, because math isn't statically typed. The type of a number depends on its value, and value is run-time. So the same piece of code can produce numbers of different type based on the run-time inputs. This cannot be statically determined. For instance division of integers is sometimes int x int -> int and sometimes int x int -> ratio.