A fresh approach to representing syntax with static binders in functional programming

Andrew M. Pitts
2001 Proceedings of the sixth ACM SIGPLAN international conference on Functional programming - ICFP '01  
var | term term | λ var . term | let var = term in term | letrec var = term in term plus specification of how λ, let and letrec bind var s (as usual) ICFP 2001 -p.7 datatype term = Var of ν | term term | λ var . term | let var = term in term | letrec var = term in term plus specification of how λ, let and letrec bind var s (as usual) Var of ν | term term | λ var . term | let var = term in term | letrec var = term in term plus specification of how λ, let and letrec bind var s (as usual) ν is a
more » ... pe of bindable names (not int, string, . . . !) plus specification of how λ, let and letrec bind var s (as usual) ICFP 2001 -p.7 datatype term = Var of ν | App of term * term | Lam of ν . term | let var = term in term | letrec var = term in term plus specification of how λ, let and letrec bind var s (as usual) ICFP 2001 -p.7 datatype term = Var of ν | App of term * term | Lam of ν . term | let var = term in term | letrec var = term in term plus specification of how λ, let and letrec bind var s (as usual) in general, ν . α is a type of name-abstractions over values of type α (not ν * α, or ν -> α !) ICFP 2001 -p.7 datatype term = Var of ν | App of term * term | Lam of ν . term | Let of term * (ν . term) | letrec var = term in term plus specification of how λ, let and letrec bind var s (as usual) ICFP 2001 -p.7 datatype term = Var of ν | App of term * term | Lam of ν . term | Let of term * (ν . term) | Letrec of ν . (term * term) plus specification of how λ, let and letrec bind var s (as usual) ICFP 2001 -p.7 datatype term = Var of ν | App of term * term | Lam of ν . term | Let of term * (ν . term) | Letrec of ν . (term * term)
doi:10.1145/507635.507637 dblp:conf/icfp/Pitts01 fatcat:xhvl6kgrwrhofknwku4mekvz6y