This is due to how Nim handles literals. The followimg exhibits the same behaviour. proc doThing(i: float) = discard proc doThing(i: float32) = discard doThing 10 Run
Yes `typeof(10)` is `int` but not all int literals are `int`, context changes their type. Consider `var a: byte = 255` or `var a: float = 3` the compiler implicitly converts to the type. In the case of an overloaded call like this it does not know to convert to the generic 8bit ints or the generic remainder. To a point if we do `echoI int(56)` it calls the expected procedure and runs.