CS 541 Lecture -*- Outline -*- * higher-order abstract syntax reference: Dale Miller's notes, chapter 7 the trick is to represent scoping constructs by lambda terms (functions) kind exp type. kind var string -> exp. type apply exp -> exp -> exp. type abs (exp -> exp) -> exp. type let (exp -> exp) -> exp. so have (abs (x \ (apply x (var "z")))) : exp