This is a book about writing programs, and understanding them as you write them. Most large computer programs are never completely understood; if they were, they wouldn't go wrong so often and we would be able to describe what they do in a scientific way. A good language should help to improve this state of affairs.

There are many ways of trying to understand programs. People often rely too much on one way, which is called ``debugging'' and consists of running a partly-understood program to see if it does what you expected. Another way, which ML advocates, is to install some means of understanding in the very programs themselves.

Standard ML was designed with this in mind. There are two particular ways-of-understanding built in to Standard ML; one is types for understanding data, the other is the module system for understanding the structure of the large-scale programs. People who program in a language with a strong type system, like this one, often say that their programs have fewer mistakes, and they understand them better.

The authors focus upon these features of Standard ML. They are well equipped to help you to understand programming; they are experienced teachers as well as researchers of the elegant and simple ideas which inspire good programming languages and good programming style.

Above all they have written a book which is a pleasure to read; it is free of heavy detail, but doesn't avoid tricky points. I hope you will enjoy the book and be able to use the ideas, whatever programming language you use in the future.

Robin Milner
Cambridge University