A syntactic theory of sequential control
Theoretical Computer Science
PLDI '88 Proceedings of the ACM SIGPLAN 1988 conference on Programming Language design and Implementation
A functional theory of local names
POPL '94 Proceedings of the 21st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A call-by-need lambda calculus
POPL '95 Proceedings of the 22nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Bananas in space: extending fold and unfold to exponential types
FPCA '95 Proceedings of the seventh international conference on Functional programming languages and computer architecture
Revisiting catamorphisms over datatypes with embedded functions (or, programs from outer space)
POPL '96 Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Domain specific embedded compilers
Proceedings of the 2nd conference on Domain-specific languages
Primitive recursion for higher-order abstract syntax
Theoretical Computer Science
POPL '03 Proceedings of the 30th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Template meta-programming for Haskell
ACM SIGPLAN Notices
System Description: Twelf - A Meta-Logical Framework for Deductive Systems
CADE-16 Proceedings of the 16th International Conference on Automated Deduction: Automated Deduction
Closed Types as a Simple Approach to Safe Imperative Multi-stage Programming
ICALP '00 Proceedings of the 27th International Colloquium on Automata, Languages and Programming
Boxes go bananas: encoding higher-order abstract syntax with parametric polymorphism
ICFP '03 Proceedings of the eighth ACM SIGPLAN international conference on Functional programming
Functional pearl: i am not a number--i am a free variable
Haskell '04 Proceedings of the 2004 ACM SIGPLAN workshop on Haskell
A proof theory for generic judgments
ACM Transactions on Computational Logic (TOCL)
Why it's nice to be quoted: quasiquoting for haskell
Haskell '07 Proceedings of the ACM SIGPLAN workshop on Haskell workshop
Proceedings of the 35th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Nominal Techniques in Isabelle/HOL
Journal of Automated Reasoning
The Bedwyr System for Model Checking over Syntactic Expressions
CADE-21 Proceedings of the 21st international conference on Automated Deduction: Automated Deduction
The calculus of nominal inductive constructions: an intensional approach to encoding name-bindings
Proceedings of the Fourth International Workshop on Logical Frameworks and Meta-Languages: Theory and Practice
A universe of binding and computation
Proceedings of the 14th ACM SIGPLAN international conference on Functional programming
Unembedding domain-specific languages
Proceedings of the 2nd ACM SIGPLAN symposium on Haskell
Higher-order encodings with constructors
Higher-order encodings with constructors
Finally tagless, partially evaluated: Tagless staged interpreters for simpler typed languages
Journal of Functional Programming
Proceedings of the 37th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Practical programming with higher-order encodings and dependent types
ESOP'08/ETAPS'08 Proceedings of the Theory and practice of software, 17th European conference on Programming languages and systems
Compiling contextual objects: bringing higher-order abstract syntax to programmers
PLPV '13 Proceedings of the 7th workshop on Programming languages meets program verification
Hi-index | 0.00 |
Adequate encodings are a powerful programming tool, which eliminate whole classes of program bugs: they ensure that a program cannot generate ill-formed data, because such data is not part of the representation; and they also ensure that a program is well-defined, meaning that it cannot have different behaviors on different representations of the same piece of data. Unfortunately, it has proven difficult to define adequate encodings of programming languages themselves. Such encodings would be very useful in language processing tools such as interpreters, compilers, model-checking tools, etc., as these systems are often difficult to get correct. The key problem in representing programming languages is in encoding binding constructs; previous approaches have serious limitations in either the operations they allow or the correcness guarantees they make. In this paper, we introduce a new library for Haskell that allows the user to define and use higher-order encodings, a powerful technique for representing bindings. Our library allows straightforward recursion on bindings using pattern-matching, which is not possible in previous approaches. We then demonstrate our library on a medium-sized example, lambda-lifting, showing how our library can be used to make strong correctness guarantees at compile time.