Like the name implies, a language that support type inference, infers the types of variables and constants without the user having to explicitly state them. To show how type inference works, we'll be using a language called Haskell . In Haskell, one does not usually need to tell the interpreter what the type of a variable or constant is. Polymorphism Pascal and most other languages of the 70's are based on the idea that functions and procedures, and hence, operands have a unique type. Pascal is monomorphic .
Polymorphic functions are functions whose operands can have more than one type.
There is no conceptual restriction on ad hoc polymorphism. Overloading occurs when the same name is used to refer to more than one function. The proper function is determined through context. Overloading is syntactic. The proper conversion is determined by context.