{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,1,9]],"date-time":"2026-01-09T03:03:28Z","timestamp":1767927808638,"version":"3.49.0"},"reference-count":42,"publisher":"Association for Computing Machinery (ACM)","issue":"ICFP","license":[{"start":{"date-parts":[[2023,8,30]],"date-time":"2023-08-30T00:00:00Z","timestamp":1693353600000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0\/"}],"funder":[{"name":"National Science Foundation","award":["CCF-2145367"],"award-info":[{"award-number":["CCF-2145367"]}]}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2023,8,30]]},"abstract":"<jats:p>\n            Choreographic programming is an emerging paradigm for programming distributed systems. In choreographic programming, the programmer describes the behavior of the entire system as a single, unified program -- a\n            <jats:italic>choreography<\/jats:italic>\n            -- which is then compiled to individual programs that run on each node, via a compilation step called endpoint projection. We present a new model for functional choreographic programming where choreographies are expressed as computations in a monad. Our model supports cutting-edge choreographic programming features that enable modularity and code reuse: in particular, it supports\n            <jats:italic>higher-order<\/jats:italic>\n            choreographies, in which a choreography may be passed as an argument to another choreography, and\n            <jats:italic>location-polymorphic<\/jats:italic>\n            choreographies, in which a choreography can abstract over nodes. Our model is implemented in a Haskell library,\n            <jats:italic>HasChor<\/jats:italic>\n            , which lets programmers write choreographic programs while using the rich Haskell ecosystem at no cost, bringing choreographic programming within reach of everyday Haskellers. Moreover, thanks to Haskell's abstractions, the implementation of the HasChor library itself is concise and understandable, boiling down endpoint projection to its short and simple essence.\n          <\/jats:p>","DOI":"10.1145\/3607849","type":"journal-article","created":{"date-parts":[[2023,8,31]],"date-time":"2023-08-31T17:40:31Z","timestamp":1693503631000},"page":"541-565","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":14,"title":["HasChor: Functional Choreographic Programming for All (Functional Pearl)"],"prefix":"10.1145","volume":"7","author":[{"ORCID":"https:\/\/orcid.org\/0009-0006-0947-9531","authenticated-orcid":false,"given":"Gan","family":"Shen","sequence":"first","affiliation":[{"name":"University of California at Santa Cruz, USA"}]},{"ORCID":"https:\/\/orcid.org\/0009-0001-3665-0182","authenticated-orcid":false,"given":"Shun","family":"Kashiwa","sequence":"additional","affiliation":[{"name":"University of California at Santa Cruz, USA"}]},{"ORCID":"https:\/\/orcid.org\/0000-0002-1374-7715","authenticated-orcid":false,"given":"Lindsey","family":"Kuper","sequence":"additional","affiliation":[{"name":"University of California at Santa Cruz, USA"}]}],"member":"320","published-online":{"date-parts":[[2023,8,31]]},"reference":[{"key":"e_1_2_1_1_1","volume-title":"Proceedings of the 2nd International Conference on Software Engineering (ICSE \u201976)","author":"Peter","unstructured":"Peter A. Alsberg and John D. Day. 1976. A Principle for Resilient Sharing of Distributed Resources. In Proceedings of the 2nd International Conference on Software Engineering (ICSE \u201976). IEEE Computer Society Press, Washington, DC, USA. 562\u2013570."},{"key":"e_1_2_1_2_1","doi-asserted-by":"publisher","DOI":"10.1561\/2500000031"},{"key":"e_1_2_1_3_1","volume-title":"Fundamental Approaches to Software Engineering, Perdita Stevens and Andrzej W\u0105sowski (Eds.)","author":"Basu Samik","unstructured":"Samik Basu and Tevfik Bultan. 2016. Automated Choreography Repair. In Fundamental Approaches to Software Engineering, Perdita Stevens and Andrzej W\u0105sowski (Eds.). Springer Berlin Heidelberg, Berlin, Heidelberg. 13\u201330. isbn:978-3-662-49665-7"},{"key":"e_1_2_1_4_1","volume-title":"Programming Languages and Systems","author":"Carbone Marco","unstructured":"Marco Carbone, Kohei Honda, and Nobuko Yoshida. 2007. Structured Communication-Centred Programming for Web Services. In Programming Languages and Systems, Rocco De Nicola (Ed.). Springer Berlin Heidelberg, Berlin, Heidelberg. 2\u201317. isbn:978-3-540-71316-6"},{"key":"e_1_2_1_5_1","doi-asserted-by":"publisher","DOI":"10.1145\/2220365.2220367"},{"key":"e_1_2_1_6_1","doi-asserted-by":"publisher","DOI":"10.1145\/2429069.2429101"},{"key":"e_1_2_1_7_1","doi-asserted-by":"publisher","DOI":"10.1145\/2676726.2677004"},{"key":"e_1_2_1_8_1","volume-title":"Links: Web Programming Without Tiers. In Formal Methods for Components and Objects, Frank S","author":"Cooper Ezra","year":"2007","unstructured":"Ezra Cooper, Sam Lindley, Philip Wadler, and Jeremy Yallop. 2007. Links: Web Programming Without Tiers. In Formal Methods for Components and Objects, Frank S. de Boer, Marcello M. Bonsangue, Susanne Graf, and Willem-Paul de Roever (Eds.). Springer Berlin Heidelberg, Berlin, Heidelberg. 266\u2013296. isbn:978-3-540-74792-5"},{"key":"e_1_2_1_9_1","doi-asserted-by":"publisher","DOI":"10.1109\/CSF.2007.29"},{"key":"e_1_2_1_10_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-031-17715-6_15"},{"key":"e_1_2_1_11_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.tcs.2019.07.005"},{"key":"e_1_2_1_12_1","doi-asserted-by":"publisher","DOI":"10.23638\/LMCS-13(2:1)2017"},{"key":"e_1_2_1_13_1","volume-title":"AIOCJ: A Choreographic Framework for Safe Adaptive Distributed Applications. CoRR, abs\/1407.0975","author":"Preda Mila Dalla","year":"2014","unstructured":"Mila Dalla Preda, Saverio Giallorenzo, Ivan Lanese, Jacopo Mauro, and Maurizio Gabbrielli. 2014. AIOCJ: A Choreographic Framework for Safe Adaptive Distributed Applications. CoRR, abs\/1407.0975 (2014), arXiv:1407.0975. arxiv:1407.0975"},{"key":"e_1_2_1_14_1","doi-asserted-by":"publisher","DOI":"10.1109\/TIT.1976.1055638"},{"key":"e_1_2_1_15_1","unstructured":"The GHC Team. 2023. 6.1.1. Controlling extensions \u2014 Glasgow Haskell Compiler 9.7.20230225 User\u2019s Guide. https:\/\/ghc.gitlab.haskell.org\/ghc\/doc\/users_guide\/exts\/control.html##extension-GHC2021"},{"key":"e_1_2_1_16_1","doi-asserted-by":"publisher","unstructured":"Saverio Giallorenzo Fabrizio Montesi and Marco Peressotti. 2020. Object-Oriented Choreographic Programming. https:\/\/doi.org\/10.48550\/ARXIV.2005.09520","DOI":"10.48550\/ARXIV.2005.09520"},{"key":"e_1_2_1_17_1","doi-asserted-by":"publisher","DOI":"10.4230\/LIPIcs.ECOOP.2021.22"},{"key":"e_1_2_1_18_1","doi-asserted-by":"publisher","unstructured":"Eva Graversen Andrew K. Hirsch and Fabrizio Montesi. 2023. Alice or Bob?: Process Polymorphism in Choreographies. https:\/\/doi.org\/10.48550\/ARXIV.2303.04678","DOI":"10.48550\/ARXIV.2303.04678"},{"key":"e_1_2_1_19_1","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-08755-9_9"},{"key":"e_1_2_1_20_1","doi-asserted-by":"publisher","DOI":"10.1145\/3498684"},{"key":"e_1_2_1_21_1","doi-asserted-by":"publisher","DOI":"10.1145\/1328438.1328472"},{"key":"e_1_2_1_22_1","doi-asserted-by":"publisher","DOI":"10.1145\/2873052"},{"key":"e_1_2_1_23_1","doi-asserted-by":"publisher","DOI":"10.1145\/2804302.2804319"},{"key":"e_1_2_1_24_1","volume-title":"Sturgis","author":"Lampson Butler","year":"1979","unstructured":"Butler Lampson and Howard E. Sturgis. 1979. Crash Recovery in a Distributed Data Storage System. June, https:\/\/www.microsoft.com\/en-us\/research\/publication\/crash-recovery-in-a-distributed-data-storage-system\/ This unpublished paper was widely circulated in samizdat"},{"key":"e_1_2_1_25_1","doi-asserted-by":"publisher","DOI":"10.1109\/SEFM.2008.11"},{"key":"e_1_2_1_26_1","doi-asserted-by":"publisher","DOI":"10.4204\/EPTCS.123.5"},{"key":"e_1_2_1_27_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-540-88313-5_34"},{"key":"e_1_2_1_28_1","volume-title":"On the Move to Meaningful Internet Systems 2005: OTM 2005 Workshops","author":"Mendling Jan","unstructured":"Jan Mendling and Michael Hafner. 2005. From Inter-organizational Workflows to Process Execution: Generating BPEL from WS-CDL. In On the Move to Meaningful Internet Systems 2005: OTM 2005 Workshops, Robert Meersman, Zahir Tari, and Pilar Herrero (Eds.). Springer Berlin Heidelberg, Berlin, Heidelberg. 506\u2013515. isbn:978-3-540-32132-3"},{"key":"e_1_2_1_29_1","doi-asserted-by":"publisher","DOI":"10.1145\/2808098.2808099"},{"key":"e_1_2_1_30_1","volume-title":"Choreographic Programming","author":"Montesi Fabrizio","unstructured":"Fabrizio Montesi. 2013. Choreographic Programming. IT University of Copenhagen. https:\/\/www.fabriziomontesi.com\/files\/choreographic-programming.pdf"},{"key":"e_1_2_1_31_1","doi-asserted-by":"publisher","DOI":"10.1017\/9781108981491"},{"key":"e_1_2_1_32_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-540-78663-4_9"},{"key":"e_1_2_1_33_1","doi-asserted-by":"publisher","DOI":"10.1145\/1242572.1242704"},{"key":"e_1_2_1_34_1","doi-asserted-by":"publisher","DOI":"10.1145\/1176617.1176756"},{"key":"e_1_2_1_35_1","doi-asserted-by":"publisher","DOI":"10.1145\/2951913.2951916"},{"key":"e_1_2_1_36_1","doi-asserted-by":"publisher","DOI":"10.1109\/MSST.2010.5496972"},{"key":"e_1_2_1_37_1","volume-title":"Proceedings of the 6th Conference on Symposium on Operating Systems Design & Implementation -","volume":"6","author":"van Renesse Robbert","unstructured":"Robbert van Renesse and Fred B. Schneider. 2004. Chain Replication for Supporting High Throughput and Availability. In Proceedings of the 6th Conference on Symposium on Operating Systems Design & Implementation - Volume 6 (OSDI\u201904). USENIX Association, USA. 7."},{"key":"e_1_2_1_38_1","doi-asserted-by":"publisher","DOI":"10.1145\/3276499"},{"key":"e_1_2_1_39_1","doi-asserted-by":"publisher","DOI":"10.1145\/3397495"},{"key":"e_1_2_1_40_1","unstructured":"The World Wide Web Consortium. 2004. WS Choreography Model Overview. https:\/\/www.w3.org\/TR\/ws-chor-model\/"},{"key":"e_1_2_1_41_1","unstructured":"The World Wide Web Consortium. 2005. Web Services Choreography Description Language Version 1.0. https:\/\/www.w3.org\/TR\/ws-cdl-10\/"},{"key":"e_1_2_1_42_1","unstructured":"The World Wide Web Consortium. 2006. Web Services Choreography Description Language: Primer. https:\/\/www.w3.org\/TR\/ws-cdl-10-primer\/"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3607849","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3607849","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,17]],"date-time":"2025-06-17T16:37:06Z","timestamp":1750178226000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3607849"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2023,8,30]]},"references-count":42,"journal-issue":{"issue":"ICFP","published-print":{"date-parts":[[2023,8,30]]}},"alternative-id":["10.1145\/3607849"],"URL":"https:\/\/doi.org\/10.1145\/3607849","relation":{},"ISSN":["2475-1421"],"issn-type":[{"value":"2475-1421","type":"electronic"}],"subject":[],"published":{"date-parts":[[2023,8,30]]},"assertion":[{"value":"2023-08-31","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}