They're missing one very important part: dispatching on the return type. All my examples require that. That is, in Haskell, numeric literals are polymorphic on the type they are supposed to be: the type system can infer whether you need an Int, an Integer, a Double, a Word or even a Word18--which my last project did--just from using a literal number. In every other language I know, you would have to specify which one you wanted somehow, either by using a current syntax (like 0L or 0.1) or calling a function on the number. In Haskell, the type system can figure it out for you.
The way this happens underneath is that every type that has a Num instance has a fromInteger function. If a literal like 3435 is encountered, the fromInteger function gets called on it to convert it to the appropriate type.