In Haskel, there are two types of polymorphism
1.Parametric Polymorphism: A function is parametrically polymorphic, if it behaves equally for all types, in at least one of its type parameters
2.Bounded Polymorphism: You have bounded polymorphism or ad hoc, if you have custom behavior that you want to have for certain set of types