That's not overloading! That's how some (e.g. Haskell) languages define
function by cases, like
factorial :: (Integral a) => a -> a
factorial 0 = 1
factorial n = n * factorial (n - 1)
Run
It's equivalent to OCaml's
let rec fact n =
match n with
0 -> 1
| n -> n * (fact (n - 1))
Run
where the explicit use of match helps you see it's not overloading.
What I would like from FPLs and Rust, is algebraic data types (yeah, I know
about Nim macros to emulate them) instead of object variants, but that's too
big a change at this stage of Nim's existence.