raction that a programming language provides influences the structure and algorithmic complexity of the resulting programs: just imagine creating an artificial intelligence engine using assembly or building an operating system in a language that disallows direct access to memory. I want to use programming language design principles to improve the reliability and extensibility of software systems. In particular, I am interested in the development of type systems that good abstractions for modular, reusable code. The ubiquity of research concepts in mainstream production code demonstrates the importance of programming languages research. The upgrades made to C by C++, one of the most widely used production languages, were based on Simula's object-oriented principles and on Ada's generic programming features1 . Lisp, the language based on McCarthy's adaptation of Church's lambda calculus, has proven useful not only for artificial intelligence researchers but also for c...