Types and Programming Languages
Benjamin C. Pierce