A type-theoretic interpretation of standard ML

It has been nearly twenty years since Robin Milner introduced ML as the metalanguage of the LCF interactive theorem prover [5]. His elegant use of abstract types to ensure validity of machine-generated proofs, combined with his innovative and exible polymorphic type discipline, and supported by his rigorous proof of soundness for the language, inspired a large body of research into the type structure of programming languages. As a design tool type theory gives substance to informal ideas such as \orthogonality" and \safety" and provides a framework for evaluating and comparing languages. As an implementation tool type theory provides a framework for structuring compilers and supports the use of e cient data representations even in the presence of polymorphism [28, 27]. Milner's work on ML culminated in his ambitious proposal for Standard ML [17] that sought to extend ML to a full-scale programming language supporting functional and imperative programming and an expressive module system. Standard ML presented a serious challenge to rigorous formalization of its static and dynamic semantics. These challenges were met in The De nition of Standard ML (hereafter, The De nition), which provided a precise de nition of the static and dynamic semantics in a uniform relational framework. A key di culty in the formulation of the static semantics of Standard ML is to manage the propagation of type information in a program so as to support data abstraction while avoiding excessive notational burdens on the programmer. This is achieved in The De nition through the use of \generative stamps". Roughly speaking, each type is assigned a unique \stamp" that serves as proxy for the underlying representation of that type. This ensures that two abstract types with the same representation are distinguished from one another, and facilitates the use of type inference-based techniques in the semantics of modules. The stamp formalism does not inhibit the dynamic semantics of the language because types are erased prior to execution. Consequently, no management of stamps is required at run-time. Much recent research on both the metatheory and implementation of programming languages is based on an explicitly-typed interpretation in which the dynamic semantics is de ned on typed, rather than typeerased, programs [28, 2]. From a semantic viewpoint programs are seen as intrinsically typed, and hence fundamental relations such as operational equivalence are de ned so as to limit the set of observations to those that make type sense. From an implementation viewpoint types are used to determine the behavior of primitive operations (such as array subscripting) and to perform storage management at run-time. The

[1]  Luca Cardelli,et al.  Typeful Programming , 1989, Formal Description of Programming Concepts.

[2]  Robert Harper,et al.  An Interpretation of Standard ML in Type Theory , 1997 .

[3]  M. Lillibridge Translucent Sums: A Foundation for Higher-Order Module Systems , 1997 .

[4]  Michael J. C. Gordon,et al.  Edinburgh LCF: A mechanised logic of computation , 1979 .

[5]  Andrew W. Appel,et al.  Compiling with Continuations , 1991 .

[6]  John C. Reynolds,et al.  Towards a theory of type structure , 1974, Symposium on Programming.

[7]  Dana S. Scott,et al.  Data Types as Lattices , 1976, SIAM J. Comput..

[8]  ScienceYale UniversityNew Haven An Overview of the Flint/ml Compiler , 1997 .

[9]  Andrew M. Pitts,et al.  Observable Properties of Higher Order Functions that Dynamically Create Local Names, or What's new? , 1993, MFCS.

[10]  Xavier Leroy,et al.  Manifest types, modules, and separate compilation , 1994, POPL '94.

[11]  Robert Harper,et al.  A Simplified Account of Polymorphic References , 1994, Inf. Process. Lett..

[12]  David B. MacQueen Using dependent types to express modular structure , 1986, POPL '86.

[13]  Eugenio Moggi,et al.  Notions of Computation and Monads , 1991, Inf. Comput..

[14]  Robin Milner,et al.  A proposal for standard ML , 1984, LFP '84.

[15]  Xavier Leroy,et al.  A syntactic theory of type generativity and sharing , 1996, Journal of Functional Programming.

[16]  Mark Lillibridge,et al.  A type-theoretic approach to higher-order modules with sharing , 1994, POPL '94.

[17]  J. Girard Une Extension De ĽInterpretation De Gödel a ĽAnalyse, Et Son Application a ĽElimination Des Coupures Dans ĽAnalyse Et La Theorie Des Types , 1971 .

[18]  Matthias Felleisen,et al.  A Syntactic Approach to Type Soundness , 1994, Inf. Comput..

[19]  Andrew K. Wright Simple imperative polymorphism , 1995, LISP Symb. Comput..

[20]  Philip Wadler,et al.  How to make ad-hoc polymorphism less ad hoc , 1989, POPL '89.

[21]  Chris Okasaki,et al.  Purely functional data structures , 1998 .

[22]  Xavier Leroy,et al.  Polymorphism by name for references and continuations , 1993, POPL '93.

[23]  Mads Tofte,et al.  Type Inference for Polymorphic References , 1990, Inf. Comput..

[24]  John C. Mitchell,et al.  Abstract types have existential type , 1988, TOPL.

[25]  John C. Mitchell,et al.  On the type structure of standard ML , 1993, TOPL.

[26]  Andrew W. Appel,et al.  A type-based compiler for standard ML , 1995, PLDI '95.

[27]  Robert Harper,et al.  Compiling polymorphism using intensional type analysis , 1995, POPL '95.