The structure of typed programming languages - Schmidt, David A. (Foundations of computing, 1994)