15-312 Foundations of Programming Languages
Lecture 12: Data Abstraction
In this lecture we discuss data abstraction and how it must be
supported in a type system. The appropriate type-theoretic notion is
that of an existential types. Existential types are dual to universal
polymorphic types, but at the core they both incorporate parametricity.
It is parametricity that guarantees that data abstraction, the hiding
of the implementation of data types, cannot be violated.
Existential types are not directly supported in ML, but folded into
the module system. We talk about the relation between modules and
existential types and consider some examples.