Macro-by-example: Deriving syntactic transformations from their specifications
POPL '87 Proceedings of the 14th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
LFP '88 Proceedings of the 1988 ACM conference on LISP and functional programming
POPL '91 Proceedings of the 18th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A confluent calculus of Macro expansion and evaluation
LFP '92 Proceedings of the 1992 ACM conference on LISP and functional programming
Syntactic abstraction in Scheme
Lisp and Symbolic Computation
A syntactic approach to type soundness
Information and Computation
LFP '86 Proceedings of the 1986 ACM conference on LISP and functional programming
Macros as multi-stage computations: type-safe, generative, binding macros in MacroML
Proceedings of the sixth ACM SIGPLAN international conference on Functional programming
Template meta-programming for Haskell
Proceedings of the 2002 ACM SIGPLAN workshop on Haskell
Some Lambda Calculus and Type Theory Formalized
Journal of Automated Reasoning
A Mechanisation of Name-Carrying Syntax up to Alpha-Conversion
HUG '93 Proceedings of the 6th International Workshop on Higher Order Logic Theorem Proving and its Applications
Linguistic reuse
Proceedings of the 2nd international conference on Generative programming and component engineering
Functional pearl: i am not a number--i am a free variable
Haskell '04 Proceedings of the 2004 ACM SIGPLAN workshop on Haskell
Building language towers with ziggurat
Journal of Functional Programming
“little language” project modules
Journal of Functional Programming
Proceedings of the 15th ACM SIGPLAN international conference on Functional programming
An implementation of a hygienic syntactic macro system for JavaScript: a preliminary report
Workshop on Self-Sustaining Systems
Proceedings of the 16th ACM SIGPLAN international conference on Functional programming
TFP'10 Proceedings of the 11th international conference on Trends in functional programming
Proceedings of the 18th ACM SIGPLAN international conference on Functional programming
Hi-index | 0.00 |
Hygienic macro systems, such as Scheme's, automatically rename variables to prevent unintentional variable capture--in short, they "just work." Yet hygiene has never been formally presented as a specification rather than an algorithm. According to folklore, the definition of hygienicmacro expansion hinges on the preservation of alpha-equivalence. But the only known notion of alpha-equivalence for programs with macros depends on the results of macro expansion! We break this circularity by introducing explicit binding specifications into the syntax of macro definitions, permitting a definition of alpha-equivalence independent of expansion. We define a semantics for a first-order subset of Scheme-like macros and prove hygiene as a consequence of confluence.