{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,7,16]],"date-time":"2026-07-16T22:01:25Z","timestamp":1784239285252,"version":"3.55.0"},"reference-count":44,"publisher":"Association for Computing Machinery (ACM)","issue":"PLDI","license":[{"start":{"date-parts":[[2024,6,20]],"date-time":"2024-06-20T00:00:00Z","timestamp":1718841600000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0\/"}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2024,6,20]]},"abstract":"<jats:p>We present associated effects, a programming language feature that enables type classes to abstract over the effects of their function signatures, allowing each type class instance to specify its concrete effects.<\/jats:p>\n          <jats:p>Associated effects significantly increase the flexibility and expressive power of a programming language that combines a type and effect system with type classes. In particular, associated effects allow us to (i) abstract over total and partial functions, where partial functions may throw exceptions, (ii) abstract over immutable data structures and mutable data structures that have heap effects, and (iii) implement adaptors that combine type classes with algebraic effects.<\/jats:p>\n          <jats:p>We implement associated effects as an extension of the Flix programming language and refactor the Flix Standard Library to use associated effects, significantly increasing its flexibility and expressive power. Specifically, we add associated effects to 11 type classes, which enables us to add 28 new type class instances.<\/jats:p>\n          <jats:p>\n            CCS Concepts: \u2022\n            <jats:bold>Software and its engineering \u2192 Language features<\/jats:bold>\n            .\n          <\/jats:p>","DOI":"10.1145\/3656393","type":"journal-article","created":{"date-parts":[[2024,6,20]],"date-time":"2024-06-20T16:27:20Z","timestamp":1718900840000},"page":"394-416","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":6,"title":["Associated Effects: Flexible Abstractions for Effectful Programming"],"prefix":"10.1145","volume":"8","author":[{"ORCID":"https:\/\/orcid.org\/0000-0002-2904-5099","authenticated-orcid":false,"given":"Matthew","family":"Lutze","sequence":"first","affiliation":[{"name":"Aarhus University, Aarhus, Denmark"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"ORCID":"https:\/\/orcid.org\/0000-0002-7510-8724","authenticated-orcid":false,"given":"Magnus","family":"Madsen","sequence":"additional","affiliation":[{"name":"Aarhus University, Aarhus, Denmark"}],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"320","published-online":{"date-parts":[[2024,6,20]]},"reference":[{"key":"e_1_3_1_2_1","doi-asserted-by":"crossref","unstructured":"Torben Amtoft Flemming Nielson and Hanne Riis.Nielson. 1997. Type and behaviour reconstruction for higher-order concurrent programs. Journal of Functional Programming 7 3 (1997). https:\/\/doi.org\/10.1017\/s0956796897002700","DOI":"10.1017\/S0956796897002700"},{"key":"e_1_3_1_3_1","doi-asserted-by":"publisher","DOI":"10.1145\/3276481"},{"key":"e_1_3_1_4_1","doi-asserted-by":"publisher","unstructured":"Jonathan Immanuel Brachth\u00e4user Philipp Schuster and Klaus Ostermann. 2020. Effekt: Capability-passing style for type- and effect-safe extensible effect handlers in Scala. Journal of Functional Programming 30 (2020).https:\/\/doi.org\/10.1017\/s0956796820000027 10.1017\/s0956796820000027","DOI":"10.1017\/s0956796820000027"},{"key":"e_1_3_1_5_1","doi-asserted-by":"publisher","DOI":"10.1145\/2500365.2500581"},{"key":"e_1_3_1_6_1","doi-asserted-by":"publisher","unstructured":"Manuel M. T. Chakravarty Gabriele Keller Simon Peyton Jones and Simon Marlow. 2005b. Associated types with class. ACM SIGPLAN Notices 40 1 (2005).https:\/\/doi.org\/10.1145\/1047659.1040306 10.1145\/1047659.1040306","DOI":"10.1145\/1047659.1040306"},{"key":"e_1_3_1_7_1","doi-asserted-by":"publisher","unstructured":"Manuel M. T. Chakravarty Gabriele Keller and Simon Peyton.Jones. 2005a. Associated type synonyms. ACM SIGPLAN Notices 40 9 (2005).https:\/\/doi.org\/10.1145\/1090189.1086397 10.1145\/1090189.1086397","DOI":"10.1145\/1090189.1086397"},{"key":"e_1_3_1_8_1","doi-asserted-by":"publisher","DOI":"10.1145\/141471.141536"},{"key":"e_1_3_1_9_1","doi-asserted-by":"publisher","unstructured":"Lukas Convent Sam Lindley Conor McBride and Craig McLaughlin. 2020. Doo bee doo bee doo. Journal of Functional Programming 30 (2020).https:\/\/doi.org\/10.1017\/s0956796820000039 10.1017\/s0956796820000039","DOI":"10.1017\/s0956796820000039"},{"key":"e_1_3_1_10_1","doi-asserted-by":"publisher","DOI":"10.1145\/3009837.3009882"},{"key":"e_1_3_1_11_1","doi-asserted-by":"crossref","unstructured":"Dominic Duggan and John Ophel. 2002. Type-checking multi-parameter type classes. Journal of Functional Programming 12 02 (2002). https:\/\/doi.org\/10.1017\/s0956796801004233","DOI":"10.1017\/S0956796801004233"},{"key":"e_1_3_1_12_1","doi-asserted-by":"publisher","DOI":"10.1145\/3591256"},{"key":"e_1_3_1_13_1","doi-asserted-by":"publisher","DOI":"10.1145\/949305.949317"},{"key":"e_1_3_1_14_1","doi-asserted-by":"publisher","unstructured":"Colin S. Gordon. 2021. Polymorphic Iterable Sequential Effect Systems. ACM Transactions on Programming Languages and Systems 43 1 (2021).https:\/\/doi.org\/10.1145\/3450272 10.1145\/3450272","DOI":"10.1145\/3450272"},{"key":"e_1_3_1_15_1","doi-asserted-by":"publisher","DOI":"10.1145\/512529.512547"},{"key":"e_1_3_1_16_1","doi-asserted-by":"publisher","DOI":"10.1145\/2976022.2976033"},{"key":"e_1_3_1_17_1","doi-asserted-by":"crossref","unstructured":"Roger Hindley. 1969. The principal type-scheme of an object in combinatory logic. Transactions of the American Mathematical Society (AMS) (1969).","DOI":"10.2307\/1995158"},{"key":"e_1_3_1_18_1","doi-asserted-by":"publisher","DOI":"10.1145\/3527326"},{"key":"e_1_3_1_19_1","doi-asserted-by":"publisher","DOI":"10.1145\/165180.165190"},{"key":"e_1_3_1_20_1","unstructured":"Mark P. Jones. 1999. Typing Haskell in Haskell. In Haskell Workshop."},{"key":"e_1_3_1_21_1","doi-asserted-by":"publisher","unstructured":"Mark P. Jones. 2000. Type Classes with Functional Dependencies. Springer Berlin Heidelberg 230-244.https:\/\/doi.org\/10.1007\/3-540-46425-5_15 10.1007\/3-540-46425-5_15","DOI":"10.1007\/3-540-46425-5_15"},{"key":"e_1_3_1_22_1","unstructured":"Steve Klabnik and Carol Nichols. 2023. The Rust programming language. No Starch Press."},{"key":"e_1_3_1_23_1","doi-asserted-by":"publisher","unstructured":"Daan Leijen. 2014. Koka: Programming with Row Polymorphic Effect Types. (2014).https:\/\/doi.org\/10.48550\/ARXIV.1406.2061 10.48550\/ARXIV.1406.2061","DOI":"10.48550\/ARXIV.1406.2061"},{"key":"e_1_3_1_24_1","doi-asserted-by":"publisher","DOI":"10.1145\/3009837.3009872"},{"key":"e_1_3_1_25_1","doi-asserted-by":"publisher","unstructured":"Xavier Leroy and Frangois Pessaux. 2000. Type-based analysis of uncaught exceptions. ACM Transactions on Programming Languages and Systems 22 2 (2000).https:\/\/doi.org\/10.1145\/349214.349230 10.1145\/349214.349230","DOI":"10.1145\/349214.349230"},{"key":"e_1_3_1_26_1","doi-asserted-by":"publisher","DOI":"10.1145\/2103786.2103798"},{"key":"e_1_3_1_27_1","doi-asserted-by":"publisher","DOI":"10.1145\/3009837.3009897"},{"key":"e_1_3_1_28_1","doi-asserted-by":"publisher","DOI":"10.1145\/73560.73564"},{"key":"e_1_3_1_29_1","doi-asserted-by":"publisher","DOI":"10.1145\/3607846"},{"key":"e_1_3_1_30_1","doi-asserted-by":"publisher","DOI":"10.1145\/3428193"},{"key":"e_1_3_1_31_1","doi-asserted-by":"publisher","DOI":"10.1145\/3428222"},{"key":"e_1_3_1_32_1","doi-asserted-by":"publisher","unstructured":"Magnus Madsen and Jaco van.de Pol. 2023. Programming with Purity Reflection: Peaceful Coexistence of Effects Laziness and Parallelism. In 37th European Conference on Object-Oriented Programming.https:\/\/doi.org\/10.4230\/LIPICS.ECOOP.2023.18 10.4230\/LIPICS.ECOOP.2023.18","DOI":"10.4230\/LIPICS.ECOOP.2023.18"},{"key":"e_1_3_1_33_1","doi-asserted-by":"publisher","unstructured":"Robin Milner. 1978. A theory of type polymorphism in programming. J. Comput. System Sci. 17 3 (1978).https:\/\/doi.org\/10.1016\/0022-0000(78)90014-4 10.1016\/0022-0000(78)90014-4","DOI":"10.1016\/0022-0000(78)90014-4"},{"key":"e_1_3_1_34_1","doi-asserted-by":"publisher","DOI":"10.1145\/1449764.1449798"},{"key":"e_1_3_1_35_1","doi-asserted-by":"publisher","DOI":"10.1002\/(sici)1096-9942(199901\/03)5:1<35::aid-tapo4>3.0.co;2-4"},{"key":"e_1_3_1_36_1","doi-asserted-by":"publisher","unstructured":"Dominic Orchard and Tomas Petricek. 2014. Embedding effect systems in Haskell. ACM SIGPLANNotices 49 12 (2014).https:\/\/doi.org\/10.1145\/2775050.2633368 10.1145\/2775050.2633368","DOI":"10.1145\/2775050.2633368"},{"key":"e_1_3_1_37_1","doi-asserted-by":"publisher","DOI":"10.1145\/3409006"},{"key":"e_1_3_1_38_1","doi-asserted-by":"publisher","DOI":"10.1145\/3563304"},{"key":"e_1_3_1_39_1","doi-asserted-by":"publisher","unstructured":"Simon Peyton Jones MarkJones and Erik Meijer. 1997. Type classes: an exploration of the design space. In Haskell Workshop. Gordon Plotkin and Matija Pretnar. 2009. Handlers of Algebraic Effects. Springer Berlin Heidelberg 80-94.https:\/\/doi.org\/10.1007\/978-3-642-00590-9_7 10.1007\/978-3-642-00590-9_7","DOI":"10.1007\/978-3-642-00590-9_7"},{"key":"e_1_3_1_40_1","volume-title":"Advanced topics in types and programming languages.","author":"Pottier Frangois","year":"2004","unstructured":"Frangois Pottier and Didier Remy. 2004. Advanced topics in types and programming languages. MIT press, Chapter 10."},{"key":"e_1_3_1_41_1","doi-asserted-by":"publisher","DOI":"10.1145\/3571264"},{"key":"e_1_3_1_42_1","doi-asserted-by":"publisher","unstructured":"Mads Tofte and Jean-Pierre Talpin. 1997. Region-Based Memory Management. Information and Computation 132 2 (1997).https:\/\/doi.org\/10.1006\/inco.1996.2613 10.1006\/inco.1996.2613","DOI":"10.1006\/inco.1996.2613"},{"key":"e_1_3_1_43_1","doi-asserted-by":"publisher","DOI":"10.1145\/1708016.1708023"},{"key":"e_1_3_1_44_1","doi-asserted-by":"publisher","unstructured":"Dimitrios Vytiniotis Simon Peyton Jones Tom Schrijvers and Martin Sulzmann. 2011. OutsideIn(X) Modular type inference with local assumptions. Journal ofFunctional Programming 21 4-5 (2011).https:\/\/doi.org\/10.1017\/s0956796811000098 10.1017\/s0956796811000098","DOI":"10.1017\/s0956796811000098"},{"key":"e_1_3_1_45_1","doi-asserted-by":"publisher","DOI":"10.1145\/75277.75283"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3656393","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3656393","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,7,4]],"date-time":"2025-07-04T20:39:45Z","timestamp":1751661585000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3656393"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2024,6,20]]},"references-count":44,"journal-issue":{"issue":"PLDI","published-print":{"date-parts":[[2024,6,20]]}},"alternative-id":["10.1145\/3656393"],"URL":"https:\/\/doi.org\/10.1145\/3656393","relation":{},"ISSN":["2475-1421"],"issn-type":[{"value":"2475-1421","type":"electronic"}],"subject":[],"published":{"date-parts":[[2024,6,20]]},"assertion":[{"value":"2024-06-20","order":3,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}