Two algorithms for maintaining order in a list
STOC '87 Proceedings of the nineteenth annual ACM symposium on Theory of computing
Derivation of programs which traverse their input data only once
Advanced Programming Methodologies
FPCA '89 Proceedings of the fourth international conference on Functional programming languages and computer architecture
The essence of functional programming
POPL '92 Proceedings of the 19th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Update semantics of relational views
ACM Transactions on Database Systems (TODS)
Fundamental Concepts in Programming Languages
Higher-Order and Symbolic Computation
Free theorems in the presence of seq
Proceedings of the 31st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A programmable editor for developing structured documents based on bidirectional transformations
Proceedings of the 2004 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Fast and loose reasoning is morally correct
Conference record of the 33rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Relational lenses: a language for updatable views
Proceedings of the twenty-fifth ACM SIGMOD-SIGACT-SIGART symposium on Principles of database systems
Combinators for bidirectional tree transformations: A linguistic approach to the view-update problem
ACM Transactions on Programming Languages and Systems (TOPLAS) - Special issue on POPL 2005
Bidirectionalization transformation based on automatic derivation of view complement functions
ICFP '07 Proceedings of the 12th ACM SIGPLAN international conference on Functional programming
Boomerang: resourceful lenses for string data
Proceedings of the 35th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Applicative programming with effects
Journal of Functional Programming
Proceedings of the 13th ACM SIGPLAN international conference on Functional programming
FOSSACS'03/ETAPS'03 Proceedings of the 6th International conference on Foundations of Software Science and Computation Structures and joint European conference on Theory and practice of software
Foundations for Bidirectional Programming
ICMT '09 Proceedings of the 2nd International Conference on Theory and Practice of Model Transformations
Bidirectional Transformations: A Cross-Discipline Perspective
ICMT '09 Proceedings of the 2nd International Conference on Theory and Practice of Model Transformations
Free theorems involving type constructor classes: functional pearl
Proceedings of the 14th ACM SIGPLAN international conference on Functional programming
Free theorems for functional logic programs
Proceedings of the 4th ACM SIGPLAN workshop on Programming languages meets program verification
Combining syntactic and semantic bidirectionalization
Proceedings of the 15th ACM SIGPLAN international conference on Functional programming
Matching lenses: alignment and view update
Proceedings of the 15th ACM SIGPLAN international conference on Functional programming
Parametricity and dependent types
Proceedings of the 15th ACM SIGPLAN international conference on Functional programming
MPC'10 Proceedings of the 10th international conference on Mathematics of program construction
Calculating with lenses: optimising bidirectional transformations
Proceedings of the 20th ACM SIGPLAN workshop on Partial evaluation and program manipulation
Minimally strict polymorphic functions
Proceedings of the 13th international ACM SIGPLAN symposium on Principles and practices of declarative programming
Toward bidirectionalization of ATL with GRoundTram
ICMT'11 Proceedings of the 4th international conference on Theory and practice of model transformations
Balanced trees inhabiting functional parallel programming
Proceedings of the 16th ACM SIGPLAN international conference on Functional programming
Incremental updates for efficient bidirectional transformations
Proceedings of the 16th ACM SIGPLAN international conference on Functional programming
Ideas for connecting inductive program synthesis and bidirectionalization
PEPM '12 Proceedings of the ACM SIGPLAN 2012 workshop on Partial evaluation and program manipulation
Automatically generating counterexamples to naive free theorems
FLOPS'10 Proceedings of the 10th international conference on Functional and Logic Programming
Linguistic foundations for bidirectional transformations: invited tutorial
PODS '12 Proceedings of the 31st symposium on Principles of Database Systems
A Computational Interpretation of Parametricity
LICS '12 Proceedings of the 2012 27th Annual IEEE/ACM Symposium on Logic in Computer Science
ICMT'12 Proceedings of the 5th international conference on Theory and Practice of Model Transformations
Three complementary approaches to bidirectional programming
SSGIP'10 Proceedings of the 2010 international spring school conference on Generic and Indexed Programming
Relations as executable specifications: taming partiality and non-determinism using invariants
RAMiCS'12 Proceedings of the 13th international conference on Relational and Algebraic Methods in Computer Science
Programming language approaches to bidirectional transformation
Proceedings of the Twelfth Workshop on Language Descriptions, Tools, and Applications
Proceedings of the 15th Symposium on Principles and Practice of Declarative Programming
Science of Computer Programming
Semantic bidirectionalization revisited
Proceedings of the ACM SIGPLAN 2014 Workshop on Partial Evaluation and Program Manipulation
Monadic combinators for "Putback" style bidirectional programming
Proceedings of the ACM SIGPLAN 2014 Workshop on Partial Evaluation and Program Manipulation
Hi-index | 0.00 |
A bidirectional transformation consists of a function get that takes a source (document or value) to a view and a function put that takes an updated view and the original source back to an updated source, governed by certain consistency conditions relating the two functions. Both the database and programming language communities have studied techniques that essentially allow a user to specify only one of get and put and have the other inferred automatically. All approaches so far to this bidirectionalization task have been syntactic in nature, either proposing a domain-specific language with limited expressiveness but built-in (and composable) backward components, or restricting get to a simple syntactic form from which some algorithm can synthesize an appropriate definition for put. Here we present a semantic approach instead. The idea is to take a general-purpose language, Haskell, and write a higher-order function that takes (polymorphic) get-functions as arguments and returns appropriate put-functions. All this on the level of semantic values, without being willing, or even able, to inspect the definition of get, and thus liberated from syntactic restraints. Our solution is inspired by relational parametricity and uses free theorems for proving the consistency conditions. It works beautifully.