Regarding assignment, it doesn't have to depend on types being indistinguishable. E.g.: proc p(x: int) = echo "int" proc p(x: int8) = echo "int8" var x: int8 x=3 # implicit conversion p x # int8 p 3 # int
overloading works here, while allowing literal's assignment with implicit conversion.