Polymorphism and Constraints in Hindley/Milner Type Systems
In this talk we study the impact of constrained polymorphism in
Hindley/Milner style type systems extended
with some form of constraints. Type schemes additionally contain a
constraint component which restricts the number of types
which can be substituted for bound type variables. We consider different
formulations of the quantifier introduction rule in
systems that support overloading and records. In previous work the
formulation of this rule has been purly syntactic.
We point out some of the limitations which are based on this kind of
formulation. For instance, we consider Haskell-style
overloading. Recently, there has been a proposal to extend Haskell's
type classes and permit multi--parameter type classes and
arbitrary types in type schemes. This proposal is based on the theory of
qualified types. We show that a type system based on
the theory of qualified types that allows multi-parameter type classes
and arbitrary types in type schemes is unsound.
We propose HM(X) as the proper logical framework for Hindley/Milner type
systems with constraints.
The HM(X) framework considers the constraint system as a parameter of
the type system and comes with a
semantic--based formulation of the quantifier introduction rule. We show
how the semantic--based formulation of
the quantifier introduction rule improves previous formulations.