Types And Programming Languages By Benjamin C. Pierce