Matching Lenses: Alignment and View Update
Bidirectional programming languages are a practical approach to the view update problem. Programs in these languages, called lenses, define both a view and an update policy-i.e.,every prog ram can be read as a function mapping sources to views as well as one mapping updated views back to updated sources. One thorny issue that has not received sufficient attention in the design of bidirectional languages is alignment. In general, to correctly propagate an update to a view,a lens need stomatch up the pieces of the view with the corresponding pieces of the underlying source, even after data has been inserted, deleted, or reordered. However, existing bidirectional languages either support only simple strategies that fail on many examples of practical interest, orelse propose specific strategies that are baked deeply into the underlying theory. We propose a general framework of matching lenses that parame terizeslenses over arbitrary heuristics for calculating alignments. We enrich the types of lenses with"chunks" identifying reorderable pieces of the source and view that should be re-aligned after an update, and we formulate behavior all aws that capture essential constraints on the handling of chunks. We develop a core language of matching lenses for strings, together with a set of "alignment combinators" that implement a variety of alignment strategies
lenses alignment languages view update problem design theory bidirectionallanguages boomerang