Theoretical aspects of object-oriented programming types, semantics, and language design (MIT Press, 1994)