We present a safe embedding of mutable data structures in functional languages. With safety we mean that confluence and (in some sense) referential transparency are maintained. We develop a static criterion based on abstract interpretation which checks that any side-effect which a function may exert via a destructive update remains invisible. The technique opens up the possibility of designing safe and efficient wide-spectrum languages which combine functional and imperative language constructs. 1 Introduction We are interested in the design of programming notations which augment a functional core with imperative statements and mutable data structures such as arrays. These wide-spectrum languages  promise to bridge the gap between abstract and declarative specifications/prototypes and efficient implementations. There are advantages to having one notation instead of two for both programming activities: We can derive the program from the specification by local transformations (whic...
user correction - Legacy Corrections
In Proc. 18th ACM Symp. on Principles of Programming Languages