Applicative bidirectional programming

@article{Matsuda2018ApplicativeBP,
  title={Applicative bidirectional programming},
  author={Kazutaka Matsuda and Meng Wang},
  journal={Journal of Functional Programming},
  year={2018},
  volume={28}
}
Abstract A bidirectional transformation is a pair of mappings between source and view data objects, one in each direction. When the view is modified, the source is updated accordingly with respect to some laws. One way to reduce the development and maintenance effort of bidirectional transformations is to have specialized languages in which the resulting programs are bidirectional by construction—giving rise to the paradigm of bidirectional programming. In this paper, we develop a framework for… 
HOBiT: Programming Lenses Without Using Lens Combinators
TLDR
A new bidirectional programming language HOBiT is proposed, in which lenses are represented as standard functions, and combinators are mapped to language constructs with binders, enabling programmers to write bid Directional programs in a flexible functional style and at the same time access the full expressiveness of lenses.
Embedding Invertible Languages with Binders
TLDR
This paper describes a new embedding technique of invertible programming languages, through the case of the FliPpr language, and achieves a high level of interoperability with the host language Haskell, which is not found in any other invertable languages.
Embedding invertible languages with binders: a case of the FliPpr language
TLDR
This paper describes a new embedding technique of invertible programming languages, through the case of the FliPpr language, and achieves a high level of interoperability with the host language Haskell, which is not found in any other invertable languages.
Sparcl: a language for partially-invertible computation
TLDR
This paper develops a language Sparcl for programming partially-invertible functions—functions that become invertible if some of their arguments are fixed, and presents the syntax, type system, and semantics of the language, and proves that SparCl correctly guarantees invertibility for its programs.
Embedding invertible languages with binders: a case of the FliPpr language
TLDR
This paper describes a new embedding technique of invertible programming languages, through the case of the FliPpr language, which has the advantage of inheriting host languages' feat...

References

SHOWING 1-10 OF 65 REFERENCES
Applicative bidirectional programming with lenses
TLDR
This paper develops a framework for applicative-style and higher-order bidirectional programming, in which bid Directional transformations are written as unidirectional programs in standard functional languages, opening up access to the bundle of language features previously only available to conventional unid Directional languages.
Semantic bidirectionalization revisited
TLDR
The idea of semantic bidirectionalization is revisited and the elegant principles behind the current state-of-the-art techniques are revealed, leading to much simpler implementations that scale easily.
Monadic combinators for "Putback" style bidirectional programming
TLDR
It is argued that controlling such ambiguity is essential for bidirectional transformations and proposed a novel language in which programmers write a (sort of) putback transformation, and get the unique get transformation for free.
Bidirectionalization for free with runtime recording: or, a light-weight approach to the view-update problem
TLDR
With PackM, a type class PackM is provided, which intuitively reads "a concrete datatype γ is abstracted to a type α, and the 'observations' made by a transformation on values of type γ are recorded by a monad μ", which lifts this polymorphism requirement to improve the applicability of semantic bidirectionalization.
Bidirectionalization transformation based on automatic derivation of view complement functions
TLDR
This paper proposes a new framework for bidirectionalization that can automatically generate a useful backward transformation from a view function while guaranteeing that the two transformations satisfy the biddirectional properties.
Three Complementary Approaches to Bidirectional Programming
TLDR
This paper surveys three distinct approaches to bidirectional programming, and pays particular attention to use of complements, which are structures that represent the information discarded by the transformation in the forward direction.
BiFluX: A Bidirectional Functional Update Language for XML
TLDR
A bidirectional XML updatelanguage called BIFLUX (BIdirectional FunctionaL Updates for XML), inspired by the FLUX XML update language, is proposed, with a clear and well-behaved biddirectional semantics and a decidable static type system based on regular expression types.
Combinators for bidirectional tree transformations: A linguistic approach to the view-update problem
TLDR
A novel approach to the view-update problem for tree-structured data: a domain-specific programming language in which all expressions denote bidirectional transformations on trees that map a concrete tree into a simplified abstract view and a modified abstract view to a correspondingly modified concrete tree.
Incremental updates for efficient bidirectional transformations
TLDR
This paper studies transformations that support incremental updates, and devise a constructive process to achieve this incrementality.
...
...