The Structure of Typed Programming Languages by David A. Schmidt