We surveyed the different kinds of polymorphism in a previous module. Haskell implements two kinds:
1. Parametric polymorphism (usually just called “polymorphism” in functional languages), in which a single function definition is used for all types of arguments and results.
For example, consider the length function, which returns the length of any finite list.
2. Overloading, in which the same name refers to different functions depending upon the type.
For example, consider the (+) function, which can add any supported number.
We looked at parametric polymorphism is a previous module. This section examines overloading …