TY - JOUR
T1 - "Bidirectionalization for free" for monomorphic transformations
AU - Matsuda, Kazutaka
AU - Wang, Meng
N1 - Funding Information:
This work was partially supported by JSPS KAKENHI Grant Number 24700020 , the Grand-Challenging Project on the “Linguistic Foundation for Bidirectional Model Transformation” of the National Institute of Informatics , and Swedish Foundation for Strategic Research (SSF) RIT 10-0087 , project RAWFP.
Publisher Copyright:
© 2014 Elsevier B.V.
PY - 2015/11/1
Y1 - 2015/11/1
N2 - 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. Over the years, a lot of effort has been made to offer better language support for programming such transformations. In particular, a technique known as bidirectionalization is able to analyze and transform unidirectional programs written in general purpose languages, and "bidirectionalize" them. Among others, an approach termed semantic bidirectionalization proposed by Voigtländer stands out in terms of user-friendliness. A unidirectional program can be written using arbitrary language constructs, as long as the function it represents is polymorphic and the language constructs respect parametricity. The free theorems that follow from the polymorphic type of the program allow a kind of forensic examination of the transformation, determining its effect without examining its implementation. This is convenient, as the programmer is not restricted to using a particular syntax; but it does require the transformation to be polymorphic. In this paper, we lift this polymorphism requirement to improve the applicability of semantic bidirectionalization. Concretely, we provide a type class PackMγαμ, 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 μ". With PackM, we turn monomorphic transformations into polymorphic ones that are ready to be bidirectionalized. We demonstrate our technique with case studies of typical applications of bidirectional transformation, namely text processing, XML query and graph transformation, which were commonly considered beyond semantic bidirectionalization because of their monomorphic nature.
AB - 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. Over the years, a lot of effort has been made to offer better language support for programming such transformations. In particular, a technique known as bidirectionalization is able to analyze and transform unidirectional programs written in general purpose languages, and "bidirectionalize" them. Among others, an approach termed semantic bidirectionalization proposed by Voigtländer stands out in terms of user-friendliness. A unidirectional program can be written using arbitrary language constructs, as long as the function it represents is polymorphic and the language constructs respect parametricity. The free theorems that follow from the polymorphic type of the program allow a kind of forensic examination of the transformation, determining its effect without examining its implementation. This is convenient, as the programmer is not restricted to using a particular syntax; but it does require the transformation to be polymorphic. In this paper, we lift this polymorphism requirement to improve the applicability of semantic bidirectionalization. Concretely, we provide a type class PackMγαμ, 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 μ". With PackM, we turn monomorphic transformations into polymorphic ones that are ready to be bidirectionalized. We demonstrate our technique with case studies of typical applications of bidirectional transformation, namely text processing, XML query and graph transformation, which were commonly considered beyond semantic bidirectionalization because of their monomorphic nature.
KW - Bidirectional transformation
KW - Free theorem
KW - Haskell
KW - Type class
UR - http://www.scopus.com/inward/record.url?scp=84940439855&partnerID=8YFLogxK
UR - http://www.scopus.com/inward/citedby.url?scp=84940439855&partnerID=8YFLogxK
U2 - 10.1016/j.scico.2014.07.008
DO - 10.1016/j.scico.2014.07.008
M3 - Article
AN - SCOPUS:84940439855
SN - 0167-6423
VL - 111
SP - 79
EP - 109
JO - Science of Computer Programming
JF - Science of Computer Programming
IS - P1
M1 - 1809
ER -