that is really, really ugly. using methods, I dont have to mess with function prefixes, and I dont have to pollute the global scope.
type
Cat = object # these are just 'struct' in a different skin
Dog = object
proc greet(c: Cat): string = "Meow"
proc greet(d: Dog): string = "Bark"
assert Dog().greet() == "Bark"
assert Cat().greet() == "Meow"