{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,4,11]],"date-time":"2026-04-11T00:50:25Z","timestamp":1775868625527,"version":"3.50.1"},"reference-count":54,"publisher":"Cambridge University Press (CUP)","license":[{"start":{"date-parts":[[2018,6,21]],"date-time":"2018-06-21T00:00:00Z","timestamp":1529539200000},"content-version":"unspecified","delay-in-days":171,"URL":"https:\/\/www.cambridge.org\/core\/terms"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["J. Funct. Prog."],"published-print":{"date-parts":[[2018]]},"abstract":"<jats:title>Abstract<\/jats:title><jats:p>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\u2014giving rise to the paradigm of bidirectional programming. In this paper, we develop a framework for <jats:italic>applicative-style<\/jats:italic> and <jats:italic>higher-order<\/jats:italic> bidirectional programming, in which we can write bidirectional transformations as unidirectional programs in standard functional languages, opening up access to the bundle of language features previously only available to conventional unidirectional languages. Our framework essentially bridges two very different approaches of bidirectional programming, namely the lens framework and Voigtl\u00e4nder's semantic bidirectionalization, creating a new programming style that is able to obtain benefits from both.<\/jats:p>","DOI":"10.1017\/s0956796818000096","type":"journal-article","created":{"date-parts":[[2018,6,21]],"date-time":"2018-06-21T05:07:11Z","timestamp":1529557631000},"source":"Crossref","is-referenced-by-count":10,"title":["Applicative bidirectional programming"],"prefix":"10.1017","volume":"28","author":[{"given":"KAZUTAKA","family":"MATSUDA","sequence":"first","affiliation":[]},{"given":"MENG","family":"WANG","sequence":"additional","affiliation":[]}],"member":"56","published-online":{"date-parts":[[2018,6,21]]},"reference":[{"key":"S0956796818000096_ref2","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796812000056"},{"key":"S0956796818000096_ref32","unstructured":"Mu S.-C. , Hu Z. & Takeichi M. (2004) An algebraic approach to bi-directional updating. In APLAS, Chin W.-N. (ed), Lecture Notes in Computer Science, vol. 3302. Springer, pp. 2\u201320."},{"key":"S0956796818000096_ref19","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796815000088"},{"key":"S0956796818000096_ref35","doi-asserted-by":"crossref","unstructured":"Pacheco H. , Zan T. & Hu Z. (2014a) BiFluX: A bidirectional functional update language for XML. In Proceedings of the 16th International Symposium on Principles and Practice of Declarative Programming, September 8\u201310, 2014, Chitil O. , King A. & Danvy O. (eds). Kent, Canterbury, United Kingdom: ACM, pp. 147\u2013158.","DOI":"10.1145\/2643135.2643141"},{"key":"S0956796818000096_ref9","doi-asserted-by":"crossref","unstructured":"Fegaras L. (2010) Propagating updates through XML views using lineage tracing. In ICDE, Li F. , Moro M. M. , Ghandeharizadeh S. , Haritsa J. R. , Weikum G. , Carey M. J. , Casati F. , Chang E. Y. , Manolescu I. , Mehrotra S. , Dayal U. & Tsotras V. J. (eds). IEEE, pp. 309\u2013320.","DOI":"10.1109\/ICDE.2010.5447896"},{"key":"S0956796818000096_ref16","doi-asserted-by":"crossref","unstructured":"Hofmann M. , Pierce B. C. & Wagner D. (2011) Symmetric lenses. In POPL, Ball T. & Sagiv M. (eds). ACM, pp. 371\u2013384.","DOI":"10.1145\/1926385.1926428"},{"key":"S0956796818000096_ref39","article-title":"Lenses for web data","volume":"57","author":"Rajkumar","year":"2013","journal-title":"Electron. Commun. EASST"},{"key":"S0956796818000096_ref52","doi-asserted-by":"crossref","unstructured":"Wang M. & Najd S. (2014) Semantic bidirectionalization revisited. In PEPM, January 20\u201321, 2014. San Diego, California, USA: ACM.","DOI":"10.1145\/2543728.2543729"},{"key":"S0956796818000096_ref13","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-540-72524-4_74"},{"key":"S0956796818000096_ref50","doi-asserted-by":"publisher","DOI":"10.1016\/j.scico.2012.07.014"},{"key":"S0956796818000096_ref6","unstructured":"Davi B. M. J. , Cretin J. , Foster N. , Greenberg M. & Pierce B. C. (2010) Matching lenses: Alignment and view update. In ICFP, September 27\u201329, 2010. Baltimore, Maryland, USA: ACM."},{"key":"S0956796818000096_ref14","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-53507-1_93"},{"key":"S0956796818000096_ref49","doi-asserted-by":"crossref","unstructured":"Wang M. , Gibbons J. , Matsuda K. & Hu Z. (2010) Gradual refinement: Blending pattern matching with data abstraction. In MPC, Bolduc C. , Desharnais J. & Ktari B. (eds), Lecture Notes in Computer Science, vol. 6120. Springer, pp. 397\u2013425.","DOI":"10.1007\/978-3-642-13321-3_22"},{"key":"S0956796818000096_ref24","doi-asserted-by":"crossref","unstructured":"Matsuda K. , Hu Z. , Nakano K. , Hamana M. & Takeichi M. (2007) Bidirectionalization transformation based on automatic derivation of view complement functions. In ICFP, Hinze R. & Ramsey N (eds). ACM, pp. 47\u201358.","DOI":"10.1145\/1291151.1291162"},{"key":"S0956796818000096_ref17","unstructured":"Hu Z. , Mu S.-C. & Takeichi M. (2004) A programmable editor for developing structured documents based on bidirectional transformations. In PEPM, Heintze N. & Sestoft P. (eds), ACM, pp. 178\u2013189."},{"key":"S0956796818000096_ref37","doi-asserted-by":"crossref","unstructured":"Paterson R. (2012) Constructing applicative functors. In MPC, Gibbons J. & Nogueira P. (eds), Lecture Notes in Computer Science, vol. 7342. Springer, pp. 300\u2013323.","DOI":"10.1007\/978-3-642-31113-0_15"},{"key":"S0956796818000096_ref54","unstructured":"Yu Y. , Lin Y. , Hu Z. , Hidaka S. , Kato H. & Montrieux L. (2012) Maintaining invariant traceability through bidirectional transformations. In ICSE, Glinz M. , Murphy G. C. & Pezz\u00e8 M. (eds). IEEE, pp. 540\u2013550."},{"key":"S0956796818000096_ref36","doi-asserted-by":"crossref","unstructured":"Paterson R. (2001) A new notation for arrows. In ICFP, Pierce B. C. (ed). ACM, pp. 229\u2013240.","DOI":"10.1145\/507635.507664"},{"key":"S0956796818000096_ref40","first-page":"513","volume-title":"Information Processing","author":"Reynolds","year":"1983"},{"key":"S0956796818000096_ref30","unstructured":"Milewski B. (2013) Lenses, Stores, and Yoneda. Blog post [online]. Accessed September 29, 2014. Available at: http:\/\/bartoszmilewski.com\/2013\/10\/08\/lenses-stores-and-yoneda\/"},{"key":"S0956796818000096_ref42","doi-asserted-by":"crossref","unstructured":"Voigtl\u00e4nder J. (2009a) Bidirectionalization for free! (pearl). In POPL, Shao Z. & Pierce B. C. (eds). ACM, pp. 165\u2013176.","DOI":"10.1145\/1594834.1480904"},{"key":"S0956796818000096_ref12","unstructured":"Foster N. , Matsuda K. & Voigtl\u00e4nder J. (2010) Three complementary approaches to bidirectional programming. In SSGIP, Gibbons J. (ed), Lecture Notes in Computer Science, vol. 7470. Springer, pp. 1\u201346."},{"key":"S0956796818000096_ref8","unstructured":"Ellis T. (2012) Category and lenses. Blog post [online]. Accessed October 17, 2014. Available at: http:\/\/web.jaguarpaw.co.uk\/~tom\/blog\/posts\/2012-09-30-category-and-lenses.html"},{"key":"S0956796818000096_ref41","unstructured":"van Laarhoven T. (2009) CPS based functional references. Blog post [online]. Available at: http:\/\/www.twanvl.nl\/blog\/haskell\/cps-functional-references."},{"key":"S0956796818000096_ref4","doi-asserted-by":"publisher","DOI":"10.1145\/1328438.1328487"},{"key":"S0956796818000096_ref5","doi-asserted-by":"publisher","DOI":"10.2307\/2266170"},{"key":"S0956796818000096_ref7","doi-asserted-by":"publisher","DOI":"10.1145\/319732.319740"},{"key":"S0956796818000096_ref10","doi-asserted-by":"publisher","DOI":"10.1145\/1232420.1232424"},{"key":"S0956796818000096_ref11","doi-asserted-by":"crossref","unstructured":"Foster J. N. , Pilkiewicz A. & Pierce B. C. (2008) Quotient lenses. In ICFP, Hook J. & Thiemann P. (eds). ACM, pp. 383\u2013396.","DOI":"10.1145\/1411204.1411257"},{"key":"S0956796818000096_ref15","doi-asserted-by":"crossref","unstructured":"Hidaka S. , Hu Z. , Inaba K. , Kato H. , Matsuda K. & Nakano K. (2010) Bidirectionalizing graph transformations. In ICFP, September 27\u201329, 2010. Baltimore, Maryland, USA: ACM.","DOI":"10.1145\/1863543.1863573"},{"key":"S0956796818000096_ref18","doi-asserted-by":"publisher","DOI":"10.1007\/BF00264598"},{"key":"S0956796818000096_ref21","doi-asserted-by":"publisher","DOI":"10.1016\/j.entcs.2011.02.018"},{"key":"S0956796818000096_ref22","doi-asserted-by":"crossref","unstructured":"Liu D. , Hu Z. & Takeichi M. (2007) Bidirectional interpretation of XQuery. In Proceedings of the SIGPLAN Workshop on Partial Evaluation and Semantics-Based Program Manipulation, January 15\u201316, 2007, Ramalingam G. & Visser E. (eds). Nice, France: ACM, pp. 21\u201330.","DOI":"10.1145\/1244381.1244386"},{"key":"S0956796818000096_ref23","volume-title":"Categories for the Working Mathematician","author":"Mac Lane","year":"1998"},{"key":"S0956796818000096_ref25","unstructured":"Matsuda K. & Wang M. (2013) Bidirectionalization for free with runtime recording: Or, a light-weight approach to the view-update problem. In PPDP, Pe\u00f1a R. & Schrijvers T. (eds). ACM, pp. 297\u2013308."},{"key":"S0956796818000096_ref26","doi-asserted-by":"publisher","DOI":"10.1016\/j.scico.2014.07.008"},{"key":"S0956796818000096_ref27","unstructured":"Matsuda K. & Wang M. (2015) Applicative bidirectional programming with lenses. In ICFP, September 1\u20133, 2015, Fisher K. & Reppy J. H. (eds). Vancouver, BC, Canada: ACM, pp. 62\u201374."},{"key":"S0956796818000096_ref29","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796807006326"},{"key":"S0956796818000096_ref31","unstructured":"Miller D. & Nadathur G. (1987) A logic programming approach to manipulating formulas and programs. In Proceedings of the 1987 Symposium on Logic Programming, August 31\u2013September 4. San Francisco, California, USA: IEEE-CS, pp. 379\u2013388."},{"key":"S0956796818000096_ref33","unstructured":"O'Connor R. (2011) Functor is to lens as applicative is to biplate: Introducing multiplate. Corr abs\/1103.2841. Accepted in WGP'11, but not included in its proceedings."},{"key":"S0956796818000096_ref34","doi-asserted-by":"crossref","unstructured":"Pacheco H. , Hu Z. & Fischer S. (2014b) Monadic combinators for \u201cputback\u201d style bidirectional programming. In PEPM, January 20\u201321, 2014. San Diego, California, USA: ACM.","DOI":"10.1145\/2543728.2543737"},{"key":"S0956796818000096_ref38","unstructured":"Pfenning F. & Elliott C. (1988) Higher-order abstract syntax. In PLDI, June 22\u201324, 1988, Wexelblat R. L. (ed). Atlanta, Georgia, USA: ACM, pp. 199\u2013208."},{"key":"S0956796818000096_ref44","doi-asserted-by":"crossref","unstructured":"Voigtl\u00e4nder J. , Hu Z. , Matsuda K. & Wang M. (2010) Combining syntactic and semantic bidirectionalization. In ICFP, September 27\u201329, 2010. Baltimore, Maryland, USA: ACM.","DOI":"10.1145\/1863543.1863571"},{"key":"S0956796818000096_ref45","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796813000130"},{"key":"S0956796818000096_ref46","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796810000079"},{"key":"S0956796818000096_ref3","doi-asserted-by":"crossref","unstructured":"Bird R. S. , Gibbons J. , Mehner S. , Voigtl\u00e4nder J. & Schrijvers T. (2013) Understanding idiomatic traversals backwards and forwards. In Haskell, Shan C.-C. (ed). ACM, pp. 25\u201336.","DOI":"10.1145\/2503778.2503781"},{"key":"S0956796818000096_ref47","unstructured":"Wadler P. (1989) Theorems for free! In FPCA '89, pp. 347\u2013359."},{"key":"S0956796818000096_ref51","doi-asserted-by":"crossref","unstructured":"Wang M. , Gibbons J. & Wu N. (2011) Incremental updates for efficient bidirectional transformations. In ICFP, Chakravarty M. M. T. , Hu Z. & Danvy O. (eds). ACM, pp. 392\u2013403.","DOI":"10.1145\/2034773.2034825"},{"key":"S0956796818000096_ref48","unstructured":"Wallace M. & Runciman C. (1999) Haskell and XML: Generic combinators or type-based translation? In ICFP, R\u00e9my D. & Lee P. (eds). ACM, pp. 148\u2013159."},{"key":"S0956796818000096_ref1","doi-asserted-by":"publisher","DOI":"10.1145\/319628.319634"},{"key":"S0956796818000096_ref43","doi-asserted-by":"crossref","unstructured":"Voigtl\u00e4nder J. (2009b) Free theorems involving type constructor classes: Functional pearl. In ICFP, Hutton G. & Tolmach A. P. (eds). ACM, pp. 173\u2013184.","DOI":"10.1145\/1631687.1596577"},{"key":"S0956796818000096_ref20","unstructured":"Ko H.-S. , Zan T. & Hu Z. (2016) BIGUL: A formally verified core language for putback-based bidirectional programming. In PEPM, January 20\u201322, 2016, Erwig M. & Rompf T. (eds). St. Petersburg, FL, USA: ACM, pp. 61\u201372."},{"key":"S0956796818000096_ref53","doi-asserted-by":"publisher","DOI":"10.1145\/1321631.1321657"},{"key":"S0956796818000096_ref28","doi-asserted-by":"crossref","unstructured":"Matsuda K. & Wang M. (2018) HOBiT: Programming lenses without using lens combinators. In ESOP, Ahmed A. (ed). Lecture Notes in Computer Science, vol. 10801, Springer, pp. 31\u201359.","DOI":"10.1007\/978-3-319-89884-1_2"}],"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S0956796818000096","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2019,6,6]],"date-time":"2019-06-06T14:29:07Z","timestamp":1559831347000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S0956796818000096\/type\/journal_article"}},"subtitle":["Mixing lenses and semantic bidirectionalization"],"short-title":[],"issued":{"date-parts":[[2018]]},"references-count":54,"alternative-id":["S0956796818000096"],"URL":"https:\/\/doi.org\/10.1017\/s0956796818000096","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[2018]]},"article-number":"e15"}}