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