Supplemental reading: section 2.3.2 from Programming Language Pragmatics 2.3