Essentials of programming languages - Friedman, Daniel P. (MIT Press, 2008)