Types, abstraction and parametric polymorphism