> I know that there is a ton of room for improvement – so if you have a thought please share.
Sheesh.
But this guy is ostensibly a professional. His CV lists a host of industry experience over the years.
And yet it seems he doesn't understand recursion? That's... Remarkable.
For function overloading the decision for which implementation to use usually happens at compile time along with the type checking. Pattern matching happens at runtime but is more powerful since you can pattern match based on you guessed it: patterns, instead of just types.
Another small difference is that with overloading multiple functions with different signatures are created (they just share name) but with pattern matching there is a single function with multiple "function clauses".