Supplemental reading: section 2.3.1 from Programming Language Pragmatics 2.3