(type 2) => int
(type 2.0) => num
(type 2.1) => num
(coerce 2.0 'int) => 2
------
"It initially makes sense for 2.0 to be 'int since it can be losslessly coerced to an integer": mostly a question of personal taste but I don't agree.
"2.0" is not "2". An integer has no decimal part. If you want an integer, either you say "2" or you coerce "2.0" to 'int. In my view, the "integer" notion is when you're dealing with low level stuff (like in C) and at this level you don't want any cleverness (like 2.0 being an int because it is mathematically equals to 2).
The fix above makes it work like that (type of 2.0 is 'num).