We examine three disparate views of the type structure of ]programming languages: Milner's type deduction system and polymorphic ~[e_.!t construct, the theory of subtypes and generic operators, and the polymorphic or second-order typed lambda calculus. These approaches are illustrated with a functional language including product, sum and list constructors. The syntactic behavio~ of types is formalized with ~ype inference rules, bus their semantics is treated intuitively.