An Introduction to the Polymorphic Lambda Calculus