Romeo

Paul Stansifer, Mitchell Wand
2014 Proceedings of the 19th ACM SIGPLAN international conference on Functional programming - ICFP '14  
Current systems for safely manipulating values containing names only support simple binding structures for those names. As a result, few tools exist to safely manipulate code in those languages for which name problems are the most challenging. We address this problem with Romeo, a language that respects α-equivalence on its values, and which has access to a rich specification language for binding, inspired by attribute grammars. Our work has the complex-binding support of David Herman's λ m,
more » ... is a full-fledged binding-safe language like Pure FreshML. (lambda (x 1 ) (lambda (x 2 ) (e 1 e 2 ))) If such a function were passed (syntax for) two identity functions, it should produce (syntax for) the composition function: But if both its arguments are the same identity function, shadowing will (in many metaprogramming systems) change the meaning to something else: (lambda (c) (lambda (c) (c c))) *
doi:10.1145/2628136.2628162 dblp:conf/icfp/StansiferW14 fatcat:3r3kb6uporhfbfogyrrgg4o77i