this is a huge feature of generic dispatch, where multiple typeclasses might match a type for a generic function, the compiler will choose the narrowest fit, or let you know at compile time that the choice is ambiguous.
e.g. there's a default `proc '$'[T:object](x:T):string` and you can still overload it for your own object types `proc '$'(x:SomeJob):string = "someJob"`