If each of those methods uses a different set of methods on their arguments, I am going to end up defining new types for each method, which might be okay for the computer to process, but for a human being it is going to be a mess to understand.Type inference, IMO, is just type checking.