Types and programming languages - Pierce, Benjamin C. (MIT, 2002)