Robert Harper, practical foundations for programming languages, http://www.cs.cmu.edu/~rwh/plbook/2nded.pdf