PLDI '88 Proceedings of the ACM SIGPLAN 1988 conference on Programming Language design and Implementation
FPCA '89 Proceedings of the fourth international conference on Functional programming languages and computer architecture
Functional programming with bananas, lenses, envelopes and barbed wire
Proceedings of the 5th ACM conference on Functional programming languages and computer architecture
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
Fully reflexive intensional type analysis
ICFP '00 Proceedings of the fifth ACM SIGPLAN international conference on Functional programming
A modal analysis of staged computation
Journal of the ACM (JACM)
Primitive recursion for higher-order abstract syntax
Theoretical Computer Science
A Hybrid Approach to Online and Offline Partial Evaluation
Higher-Order and Symbolic Computation
Meta-programming with names and necessity
Proceedings of the seventh ACM SIGPLAN international conference on Functional programming
POPL '03 Proceedings of the 30th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Guarded recursive datatype constructors
POPL '03 Proceedings of the 30th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A Generalization of Short-Cut Fusion and its Correctness Proof
Higher-Order and Symbolic Computation
Combining Higher Order Abstract Syntax with Tactical Theorem Proving and (Co)Induction
TPHOLs '02 Proceedings of the 15th International Conference on Theorem Proving in Higher Order Logics
A Metalanguage for Programming with Bound Names Modulo Renaming
MPC '00 Proceedings of the 5th International Conference on Mathematics of Program Construction
Higher-Order Intensional Type Analysis
ESOP '02 Proceedings of the 11th European Symposium on Programming Languages and Systems
A judgmental reconstruction of modal logic
Mathematical Structures in Computer Science
Recursion over objects of functional type
Mathematical Structures in Computer Science
Translating dependency into parametricity
Proceedings of the ninth ACM SIGPLAN international conference on Functional programming
Journal of Functional Programming
Type-safe run-time polytypic programming
Journal of Functional Programming
Type-Safe Code Transformations in Haskell
Electronic Notes in Theoretical Computer Science (ENTCS)
A type-preserving closure conversion in haskell
Haskell '07 Proceedings of the ACM SIGPLAN workshop on Haskell workshop
Boxes go bananas: Encoding higher-order abstract syntax with parametric polymorphism*
Journal of Functional Programming
A type-preserving compiler in Haskell
Proceedings of the 13th ACM SIGPLAN international conference on Functional programming
Electronic Notes in Theoretical Computer Science (ENTCS)
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
Parametric (co)iteration vs. primitive direcursion
CALCO'07 Proceedings of the 2nd international conference on Algebra and coalgebra in computer science
Finally tagless, partially evaluated: tagless staged interpreters for simpler typed languages
APLAS'07 Proceedings of the 5th Asian conference on Programming languages and systems
Hobbits for Haskell: a library for higher-order encodings in functional programming languages
Proceedings of the 4th ACM symposium on Haskell
Proceedings of the 16th ACM SIGPLAN international conference on Functional programming
Testing polymorphic properties
ESOP'10 Proceedings of the 19th European conference on Programming Languages and Systems
Generic conversions of abstract syntax representations
Proceedings of the 8th ACM SIGPLAN workshop on Generic programming
Fixing idioms: a recursion primitive for applicative DSLs
PEPM '13 Proceedings of the ACM SIGPLAN 2013 workshop on Partial evaluation and program manipulation
Names for free: polymorphic views of names and binders
Proceedings of the 2013 ACM SIGPLAN symposium on Haskell
Hi-index | 0.00 |
Higher-order abstract syntax is a simple technique for implementing languages with functional programming. Object variables and binders are implemented by variables and binders in the host language. By using this technique, one can avoid implementing common and tricky routines dealing with variables, such as capture-avoiding substitution. However, despite the advantages this technique provides, it is not commonly used because it is difficult to write sound elimination forms (such as folds or catamorphisms) for higher-order abstract syntax. To fold over such a datatype, one must either simultaneously define an inverse operation (which may not exist) or show that all functions embedded in the datatype are parametri.In this paper, we show how first-class polymorphism can be used to guarantee the parametricity of functions embedded in higher-order abstract syntax. With this restriction, we implement a library of iteration operators over data-structures containing functionals. From this implementation, we derive "fusion laws" that functional programmers may use to reason about the iteration operator. Finally, we show how this use of parametric polymorphism corresponds to the Schürmann, Despeyroux and Pfenning method of enforcing parametricity through modal types. We do so by using this library to give a sound and complete encoding of their calculus into System F?. This encoding can serve as a starting point for reasoning about higher-order structures in polymorphic languages.