{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,2,5]],"date-time":"2026-02-05T12:25:59Z","timestamp":1770294359110,"version":"3.49.0"},"publisher-location":"Cham","reference-count":36,"publisher":"Springer International Publishing","isbn-type":[{"value":"9783030171834","type":"print"},{"value":"9783030171841","type":"electronic"}],"license":[{"start":{"date-parts":[[2019,1,1]],"date-time":"2019-01-01T00:00:00Z","timestamp":1546300800000},"content-version":"tdm","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0"}],"content-domain":{"domain":["link.springer.com"],"crossmark-restriction":false},"short-container-title":[],"published-print":{"date-parts":[[2019]]},"DOI":"10.1007\/978-3-030-17184-1_6","type":"book-chapter","created":{"date-parts":[[2019,4,6]],"date-time":"2019-04-06T17:34:04Z","timestamp":1554572044000},"page":"147-175","update-policy":"https:\/\/doi.org\/10.1007\/springer_crossmark_policy","source":"Crossref","is-referenced-by-count":5,"title":["Composing Bidirectional Programs Monadically"],"prefix":"10.1007","author":[{"given":"Li-yao","family":"Xia","sequence":"first","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Dominic","family":"Orchard","sequence":"additional","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Meng","family":"Wang","sequence":"additional","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"297","published-online":{"date-parts":[[2019,4,6]]},"reference":[{"key":"6_CR1","series-title":"Lecture Notes in Computer Science","doi-asserted-by":"publisher","first-page":"1","DOI":"10.1007\/978-3-319-30936-1_1","volume-title":"A List of Successes That Can Change the World","author":"F Abou-Saleh","year":"2016","unstructured":"Abou-Saleh, F., Cheney, J., Gibbons, J., McKinna, J., Stevens, P.: Reflections on monadic lenses. In: Lindley, S., McBride, C., Trinder, P., Sannella, D. (eds.) A List of Successes That Can Change the World. LNCS, vol. 9600, pp. 1\u201331. Springer, Cham (2016). \n                      https:\/\/doi.org\/10.1007\/978-3-319-30936-1_1"},{"issue":"4","key":"6_CR2","doi-asserted-by":"publisher","first-page":"557","DOI":"10.1145\/319628.319634","volume":"6","author":"F Bancilhon","year":"1981","unstructured":"Bancilhon, F., Spyratos, N.: Update semantics of relational views. ACM Trans. Database Syst. 6(4), 557\u2013575 (1981)","journal-title":"ACM Trans. Database Syst."},{"key":"6_CR3","doi-asserted-by":"crossref","unstructured":"Barbosa, D.M.J., Cretin, J., Foster, N., Greenberg, M., Pierce, B.C.: Matching lenses: alignment and view update. In: International Conference on Functional Programming (ICFP), pp. 193\u2013204. ACM (2010)","DOI":"10.1145\/1932681.1863572"},{"key":"6_CR4","doi-asserted-by":"crossref","unstructured":"Bohannon, A., Foster, J.N., Pierce, B.C., Pilkiewicz, A., Schmitt, A.: Boomerang: resourceful lenses for string data. In: Symposium on Principles of Programming Languages (POPL), pp. 407\u2013419. ACM (2008)","DOI":"10.1145\/1328897.1328487"},{"key":"6_CR5","doi-asserted-by":"crossref","unstructured":"Bohannon, A., Pierce, B.C., Vaughan, J.A.: Relational lenses: a language for updatable views. In: Symposium on Principles of Database Systems (PODS), pp. 338\u2013347. ACM (2006)","DOI":"10.1145\/1142351.1142399"},{"key":"6_CR6","doi-asserted-by":"crossref","unstructured":"Bottu, G.-J., Karachalias, G., Schrijvers, T., Oliveira, B.C.d.S., Wadler, P.: Quantified class constraints. In: International Symposium on Haskell (Haskell), pp. 148\u2013161. ACM (2017)","DOI":"10.1145\/3156695.3122967"},{"key":"6_CR7","doi-asserted-by":"crossref","unstructured":"Boyapati, C., Khurshid, S., Marinov, D.: Korat: automated testing based on Java predicates. In: International Symposium on Software Testing and Analysis (ISSTA), pp. 123\u2013133. ACM (2002)","DOI":"10.1145\/566171.566191"},{"key":"6_CR8","unstructured":"Chilton, P.: Codec library. \n                      https:\/\/hackage.haskell.org\/package\/codec"},{"key":"6_CR9","doi-asserted-by":"crossref","unstructured":"Claessen, K., Dureg\u00e5rd, J., Palka, M.H.: Generating constrained random data with uniform distribution. J. Funct. Program. 25 (2015). Article e8","DOI":"10.1017\/S0956796815000143"},{"key":"6_CR10","doi-asserted-by":"crossref","unstructured":"Claessen, K., Hughes, J.: QuickCheck: a lightweight tool for random testing of Haskell programs. In: International Conference on Functional Programming (ICFP), pp. 268\u2013279. ACM (2000)","DOI":"10.1145\/357766.351266"},{"key":"6_CR11","series-title":"Lecture Notes in Computer Science","doi-asserted-by":"publisher","first-page":"260","DOI":"10.1007\/978-3-642-02408-5_19","volume-title":"Theory and Practice of Model Transformations","author":"K Czarnecki","year":"2009","unstructured":"Czarnecki, K., Foster, J.N., Hu, Z., L\u00e4mmel, R., Sch\u00fcrr, A., Terwilliger, J.F.: Bidirectional transformations: a cross-discipline perspective. In: Paige, R.F. (ed.) ICMT 2009. LNCS, vol. 5563, pp. 260\u2013283. Springer, Heidelberg (2009). \n                      https:\/\/doi.org\/10.1007\/978-3-642-02408-5_19"},{"key":"6_CR12","unstructured":"Xia et al.: Further implementations, November 2018. \n                      https:\/\/github.com\/Lysxia\/profunctor-monad"},{"issue":"3","key":"6_CR13","doi-asserted-by":"publisher","first-page":"17","DOI":"10.1145\/1232420.1232424","volume":"29","author":"JN Foster","year":"2007","unstructured":"Foster, J.N., Greenwald, M.B., Moore, J.T., Pierce, B.C., Schmitt, A.: Combinators for bidirectional tree transformations: a linguistic approach to the view-update problem. ACM Trans. Program. Lang. Syst. 29(3), 17 (2007)","journal-title":"ACM Trans. Program. Lang. Syst."},{"key":"6_CR14","doi-asserted-by":"crossref","unstructured":"Foster, N., Matsuda, K., Voigtl\u00e4nder, J.: Three complementary approaches to bidirectional programming. In: SSGIP, pp. 1\u201346 (2010)","DOI":"10.1007\/978-3-642-32202-0_1"},{"key":"6_CR15","doi-asserted-by":"crossref","unstructured":"Lampropoulos, L., Gallois-Wong, D., Hritcu, C., Hughes, J., Pierce, B.C., Xia, L.-y.: Beginner\u2019s luck: a language for property-based generators. In: Symposium on Principles of Programming Languages (POPL), pp. 114\u2013129. ACM (2017)","DOI":"10.1145\/3093333.3009868"},{"key":"6_CR16","doi-asserted-by":"crossref","unstructured":"Matsuda, K., Hu, Z., Nakano, K., Hamana, M., Takeichi, M.: Bidirectionalization transformation based on automatic derivation of view complement functions. In: International Conference on Functional Programming (ICFP), pp. 47\u201358. ACM (2007)","DOI":"10.1145\/1291220.1291162"},{"key":"6_CR17","series-title":"Lecture Notes in Computer Science","doi-asserted-by":"publisher","first-page":"101","DOI":"10.1007\/978-3-642-37036-6_6","volume-title":"Programming Languages and Systems","author":"K Matsuda","year":"2013","unstructured":"Matsuda, K., Wang, M.: FliPpr: a prettier invertible printing system. In: Felleisen, M., Gardner, P. (eds.) ESOP 2013. LNCS, vol. 7792, pp. 101\u2013120. Springer, Heidelberg (2013). \n                      https:\/\/doi.org\/10.1007\/978-3-642-37036-6_6"},{"key":"6_CR18","doi-asserted-by":"crossref","unstructured":"Matsuda, K., Wang, M.: Applicative bidirectional programming with lenses. In: International Conference on Functional Programming (ICFP), pp. 62\u201374. ACM (2015)","DOI":"10.1145\/2858949.2784750"},{"key":"6_CR19","doi-asserted-by":"crossref","unstructured":"Matsuda, K., Wang, M.: Embedding invertible languages with binders: a case of the FliPpr language. In: International Symposium on Haskell (Haskell), pp. 158\u2013171. ACM (2018)","DOI":"10.1145\/3299711.3242758"},{"key":"6_CR20","series-title":"Lecture Notes in Computer Science","doi-asserted-by":"publisher","first-page":"31","DOI":"10.1007\/978-3-319-89884-1_2","volume-title":"Programming Languages and Systems","author":"K Matsuda","year":"2018","unstructured":"Matsuda, K., Wang, M.: HOBiT: programming lenses without using lens combinators. In: Ahmed, A. (ed.) ESOP 2018. LNCS, vol. 10801, pp. 31\u201359. Springer, Cham (2018). \n                      https:\/\/doi.org\/10.1007\/978-3-319-89884-1_2"},{"issue":"OOPSLA","key":"6_CR21","doi-asserted-by":"publisher","first-page":"127:1","DOI":"10.1145\/3276497","volume":"2","author":"M Mayer","year":"2018","unstructured":"Mayer, M., Kuncak, V., Chugh, R.: Bidirectional evaluation with direct manipulation. Proc. ACM Program. Lang. 2(OOPSLA), 127:1\u2013127:28 (2018)","journal-title":"Proc. ACM Program. Lang."},{"issue":"1","key":"6_CR22","doi-asserted-by":"publisher","first-page":"1","DOI":"10.1017\/S0956796807006326","volume":"18","author":"C McBride","year":"2008","unstructured":"McBride, C., Paterson, R.: Applicative programming with effects. J. Funct. Program. 18(1), 1\u201313 (2008)","journal-title":"J. Funct. Program."},{"key":"6_CR23","series-title":"Lecture Notes in Computer Science","doi-asserted-by":"publisher","first-page":"2","DOI":"10.1007\/978-3-540-30477-7_2","volume-title":"Programming Languages and Systems","author":"S-C Mu","year":"2004","unstructured":"Mu, S.-C., Hu, Z., Takeichi, M.: An algebraic approach to bi-directional updating. In: Chin, W.-N. (ed.) APLAS 2004. LNCS, vol. 3302, pp. 2\u201320. Springer, Heidelberg (2004). \n                      https:\/\/doi.org\/10.1007\/978-3-540-30477-7_2"},{"key":"6_CR24","doi-asserted-by":"crossref","unstructured":"Pacheco, H., Hu, Z., Fischer, S.: Monadic combinators for \u201cPutback\u201d style bidirectional programming. In: Workshop on Partial Evaluation and Program Manipulation (PEPM), pp. 39\u201350. ACM (2014)","DOI":"10.1145\/2543728.2543737"},{"key":"6_CR25","doi-asserted-by":"crossref","unstructured":"Pacheco, H., Zan, T., Hu, Z.: BiFluX: a bidirectional functional update language for XML. In: International Symposium on Principles and Practice of Declarative Programming (PPDP). ACM (2014)","DOI":"10.1145\/2643135.2643141"},{"key":"6_CR26","doi-asserted-by":"crossref","unstructured":"Pickering, M., Gibbons, J., Wu, N.: Profunctor optics: modular data accessors. Art Sci. Eng. Program. 1(2) (2017). Article 7","DOI":"10.22152\/programming-journal.org\/2017\/1\/7"},{"key":"6_CR27","doi-asserted-by":"crossref","unstructured":"Pombrio, J., Krishnamurthi, S.: Resugaring: lifting evaluation sequences through syntactic sugar. In: Programming Language Design and Implementation (PLDI). ACM (2014)","DOI":"10.1145\/2594291.2594319"},{"key":"6_CR28","unstructured":"Purely Agile. Opaleye library. \n                      https:\/\/hackage.haskell.org\/package\/opaleye"},{"key":"6_CR29","unstructured":"Rajkumar, R., Lindley, S., Foster, N., Cheney, J.: Lenses for web data. In: International Workshop on Bidirectional Transformations (BX) (2013)"},{"key":"6_CR30","doi-asserted-by":"crossref","unstructured":"Rendel, T., Ostermann, K.: Invertible syntax descriptions: unifying parsing and pretty-printing. In: International Symposium on Haskell (Haskell), pp. 1\u201312 (2010)","DOI":"10.1145\/2088456.1863525"},{"key":"6_CR31","series-title":"Lecture Notes in Computer Science","doi-asserted-by":"publisher","first-page":"644","DOI":"10.1007\/978-3-662-49498-1_25","volume-title":"Programming Languages and Systems","author":"C Schuster","year":"2016","unstructured":"Schuster, C., Disney, T., Flanagan, C.: Macrofication: refactoring by reverse macro expansion. In: Thiemann, P. (ed.) ESOP 2016. LNCS, vol. 9632, pp. 644\u2013671. Springer, Heidelberg (2016). \n                      https:\/\/doi.org\/10.1007\/978-3-662-49498-1_25"},{"key":"6_CR32","series-title":"Lecture Notes in Computer Science","doi-asserted-by":"publisher","first-page":"408","DOI":"10.1007\/978-3-540-88643-3_10","volume-title":"Generative and Transformational Techniques in Software Engineering II","author":"P Stevens","year":"2008","unstructured":"Stevens, P.: A landscape of bidirectional model transformations. In: L\u00e4mmel, R., Visser, J., Saraiva, J. (eds.) GTTSE 2007. LNCS, vol. 5235, pp. 408\u2013424. Springer, Heidelberg (2008). \n                      https:\/\/doi.org\/10.1007\/978-3-540-88643-3_10"},{"key":"6_CR33","doi-asserted-by":"crossref","unstructured":"Voigtl\u00e4nder, J.: Bidirectionalization for free! (Pearl). In: Symposium on Principles of Programming Languages (POPL), pp. 165\u2013176. ACM (2009)","DOI":"10.1145\/1594834.1480904"},{"key":"6_CR34","doi-asserted-by":"crossref","unstructured":"Wadler, P.: Theorems for free! In: FPCA, pp. 347\u2013359 (1989)","DOI":"10.1145\/99370.99404"},{"key":"6_CR35","series-title":"Lecture Notes in Computer Science","doi-asserted-by":"publisher","first-page":"24","DOI":"10.1007\/3-540-59451-5_2","volume-title":"Advanced Functional Programming","author":"P Wadler","year":"1995","unstructured":"Wadler, P.: Monads for functional programming. In: Jeuring, J., Meijer, E. (eds.) AFP 1995. LNCS, vol. 925, pp. 24\u201352. Springer, Heidelberg (1995). \n                      https:\/\/doi.org\/10.1007\/3-540-59451-5_2"},{"key":"6_CR36","unstructured":"Xia, L.-Y., Orchard, D., Wang, M.: Composing bidirectional programs monadically (with appendices) (2019). \n                      https:\/\/arxiv.org\/abs\/1902.06950"}],"container-title":["Lecture Notes in Computer Science","Programming Languages and Systems"],"original-title":[],"language":"en","link":[{"URL":"http:\/\/link.springer.com\/content\/pdf\/10.1007\/978-3-030-17184-1_6","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2019,5,20]],"date-time":"2019-05-20T09:21:04Z","timestamp":1558344064000},"score":1,"resource":{"primary":{"URL":"http:\/\/link.springer.com\/10.1007\/978-3-030-17184-1_6"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2019]]},"ISBN":["9783030171834","9783030171841"],"references-count":36,"URL":"https:\/\/doi.org\/10.1007\/978-3-030-17184-1_6","relation":{},"ISSN":["0302-9743","1611-3349"],"issn-type":[{"value":"0302-9743","type":"print"},{"value":"1611-3349","type":"electronic"}],"subject":[],"published":{"date-parts":[[2019]]},"assertion":[{"value":"6 April 2019","order":1,"name":"first_online","label":"First Online","group":{"name":"ChapterHistory","label":"Chapter History"}},{"value":"ESOP","order":1,"name":"conference_acronym","label":"Conference Acronym","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"European Symposium on Programming","order":2,"name":"conference_name","label":"Conference Name","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"Prague","order":3,"name":"conference_city","label":"Conference City","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"Czech Republic","order":4,"name":"conference_country","label":"Conference Country","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"2019","order":5,"name":"conference_year","label":"Conference Year","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"8 April 2019","order":7,"name":"conference_start_date","label":"Conference Start Date","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"11 April 2019","order":8,"name":"conference_end_date","label":"Conference End Date","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"28","order":9,"name":"conference_number","label":"Conference Number","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"esop2019","order":10,"name":"conference_id","label":"Conference ID","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"https:\/\/www.etaps.org\/2019\/esop","order":11,"name":"conference_url","label":"Conference URL","group":{"name":"ConferenceInfo","label":"Conference Information"}},{"value":"Single-blind","order":1,"name":"type","label":"Type","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information"}},{"value":"EasyChair","order":2,"name":"conference_management_system","label":"Conference Management System","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information"}},{"value":"86","order":3,"name":"number_of_submissions_sent_for_review","label":"Number of Submissions Sent for Review","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information"}},{"value":"28","order":4,"name":"number_of_full_papers_accepted","label":"Number of Full Papers Accepted","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information"}},{"value":"0","order":5,"name":"number_of_short_papers_accepted","label":"Number of Short Papers Accepted","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information"}},{"value":"33% - The value is computed by the equation \"Number of Full Papers Accepted \/ Number of Submissions Sent for Review * 100\" and then rounded to a whole number.","order":6,"name":"acceptance_rate_of_full_papers","label":"Acceptance Rate of Full Papers","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information"}},{"value":"3,2","order":7,"name":"average_number_of_reviews_per_paper","label":"Average Number of Reviews per Paper","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information"}},{"value":"12","order":8,"name":"average_number_of_papers_per_reviewer","label":"Average Number of Papers per Reviewer","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information"}},{"value":"Yes","order":9,"name":"external_reviewers_involved","label":"External Reviewers Involved","group":{"name":"ConfEventPeerReviewInformation","label":"Peer Review Information"}}]}}