Foundations of canonical update support for closed database views
ICDT '90 Proceedings of the third international conference on database theory on Database theory
Update semantics of relational views
ACM Transactions on Database Systems (TODS)
On the correct translation of update operations on relational views
ACM Transactions on Database Systems (TODS)
The Clio project: managing heterogeneity
ACM SIGMOD Record
Embedding an interpreted language using higher-order functions and types
Proceedings of the 2003 workshop on Interpreters, virtual machines and emulators
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
FUNCTIONAL PEARL Pickler combinators
Journal of Functional Programming
PADS: a domain-specific language for processing ad hoc data
Proceedings of the 2005 ACM SIGPLAN conference on Programming language design and implementation
Journal of Functional Programming
There and back again: arrows for invertible programming
Proceedings of the 2005 ACM SIGPLAN workshop on Haskell
Relational lenses: a language for updatable views
Proceedings of the twenty-fifth ACM SIGMOD-SIGACT-SIGART symposium on Principles of database systems
biXid: a bidirectional transformation language for XML
Proceedings of the eleventh ACM SIGPLAN international conference on Functional programming
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
Exploiting schemas in data synchronization
Journal of Computer and System Sciences
Bidirectional interpretation of XQuery
Proceedings of the 2007 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Bidirectionalization transformation based on automatic derivation of view complement functions
ICFP '07 Proceedings of the 12th ACM SIGPLAN international conference on Functional programming
Towards automatic model synchronization from model transformations
Proceedings of the twenty-second IEEE/ACM international conference on Automated software engineering
Boomerang: resourceful lenses for string data
Proceedings of the 35th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
DBPL'05 Proceedings of the 10th international conference on Database Programming Languages
Type-safe two-level data transformation
FM'06 Proceedings of the 14th international conference on Formal Methods
Coupled schema transformation and data conversion for XML and SQL
PADL'07 Proceedings of the 9th international conference on Practical Aspects of Declarative Languages
Bidirectional model transformations in QVT: semantic issues and open questions
MODELS'07 Proceedings of the 10th international conference on Model Driven Engineering Languages and Systems
Towards an Algebraic Theory of Bidirectional Transformations
ICGT '08 Proceedings of the 4th international conference on Graph Transformations
Bidirectionalization for free! (Pearl)
Proceedings of the 36th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
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
Invertible syntax descriptions: unifying parsing and pretty printing
Proceedings of the third ACM Haskell symposium on Haskell
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
Gradual refinement: blending pattern matching with data abstraction
MPC'10 Proceedings of the 10th international conference on Mathematics of program construction
ACM SIGOPS Operating Systems Review
Proceedings of the 38th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Incremental updates for efficient bidirectional transformations
Proceedings of the 16th ACM SIGPLAN international conference on Functional programming
A framework for the checking and refactoring of crosscutting concepts
ACM Transactions on Software Engineering and Methodology (TOSEM)
Linguistic foundations for bidirectional transformations: invited tutorial
PODS '12 Proceedings of the 31st symposium on Principles of Database Systems
Viewpoint co-evolution through coarse-grained changes and coupled transformations
TOOLS'12 Proceedings of the 50th international conference on Objects, Models, Components, Patterns
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
FliPpr: a prettier invertible printing system
ESOP'13 Proceedings of the 22nd European conference on Programming Languages and Systems
Correct-by-construction pretty-printing
Proceedings of the 2013 ACM SIGPLAN workshop on Dependently-typed programming
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
Hi-index | 0.00 |
There are now a number of BIDIRECTIONAL PROGRAMMING LANGUAGES, where every program can be read both as a forward transformation mapping one data structure to another and as a reverse transformation mapping an edited output back to a correspondingly edited input. Besides parsimony - the two related transformations are described by just one expression - such languages are attractive because they promise strong behavioral laws about how the two transformations fit together - e.g., their composition is the identity function. It has repeatedly been observed, however, that such laws are actually a bit too strong: in practice, we do not want them "on the nose," but only up to some equivalence, allowing inessential details, such as whitespace, to be modified after a round trip. Some bidirectional languages loosen their laws in this way, but only for specific, baked-in equivalences. In this work, we propose a general theory of QUOTIENT LENSES - bidirectional transformations that are well behaved modulo equivalence relations controlled by the programmer. Semantically, quotient lenses are a natural refinement of LENSES, which we have studied in previous work. At the level of syntax, we present a rich set of constructs for programming with CANONIZERS and for quotienting lenses by canonizers. We track equivalences explicitly, with the type of every quotient lens specifying the equivalences it respects. We have implemented quotient lenses as a refinement of the bidirectional string processing language Boomerang. We present a number of useful primitive canonizers for strings, and give a simple extension of Boomerang's regular-expression-based type system to statically typecheck quotient lenses. The resulting language is an expressive tool for transforming real-world, ad-hoc data formats. We demonstrate the power of our notation by developing an extended example based on the UniProt genome database format and illustrate the generality of our approach by showing how uses of quotienting in other bidirectional languages can be translated into our notation.