Practical foundations for programming languages - Harper, Robert (Cambridge University, 2013)