{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T23:06:00Z","timestamp":1779836760673,"version":"3.53.1"},"reference-count":66,"publisher":"Cambridge University Press (CUP)","license":[{"start":{"date-parts":[[2020,3,31]],"date-time":"2020-03-31T00:00:00Z","timestamp":1585612800000},"content-version":"unspecified","delay-in-days":90,"URL":"http:\/\/creativecommons.org\/licenses\/by\/4.0\/"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["J. Funct. Prog."],"published-print":{"date-parts":[[2020]]},"abstract":"<jats:title>Abstract<\/jats:title>\n                  <jats:p>\n                    Effect handlers are a promising way to structure effectful programs in a modular way. We present the Scala library\n                    <jats:monospace>Effekt<\/jats:monospace>\n                    , which is centered around capability passing and implemented in terms of a monad for multi-prompt delimited continuations.\n                    <jats:monospace>Effekt<\/jats:monospace>\n                    is the first library implementation of effect handlers that supports effect safety and effect polymorphism without resorting to type-level programming. We describe a novel way of achieving effect safety using intersection types and path-dependent types. The effect system of our library design fits well into the programming paradigm of capability passing and is inspired by the effect system of Zhang &amp; Myers (2019,\n                    <jats:italic>Proc. ACM Program. Lang.<\/jats:italic>\n                    <jats:bold>3<\/jats:bold>\n                    (POPL), 5:1-5:29). Capabilities carry an abstract type member, which represents an individual effect type and reflects the use of the capability on the type level. We represent effect rows as the contravariant intersection of effect types. Handlers introduce capabilities and remove components of the intersection type. Reusing the existing type system of Scala, we get effect subtyping and effect polymorphism for free.\n                  <\/jats:p>","DOI":"10.1017\/s0956796820000027","type":"journal-article","created":{"date-parts":[[2020,3,31]],"date-time":"2020-03-31T04:48:01Z","timestamp":1585630081000},"source":"Crossref","is-referenced-by-count":25,"title":["Effekt: Capability-passing style for type- and effect-safe, extensible effect handlers in Scala"],"prefix":"10.1017","volume":"30","author":[{"ORCID":"https:\/\/orcid.org\/0000-0001-9128-0391","authenticated-orcid":false,"given":"JONATHAN IMMANUEL","family":"BRACHTH\u00c4USER","sequence":"first","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"PHILIPP","family":"SCHUSTER","sequence":"additional","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"KLAUS","family":"OSTERMANN","sequence":"additional","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"56","published-online":{"date-parts":[[2020,3,31]]},"reference":[{"key":"S0956796820000027_ref65","first-page":"1","volume-title":"In Proceedings of the Haskell Symposium. Haskell\u201914","author":"Wu","year":"2014"},{"key":"S0956796820000027_ref63","unstructured":"Wadler, P. (1998). The expression problem. Note to Java Genericity mailing list."},{"key":"S0956796820000027_ref60","doi-asserted-by":"publisher","DOI":"10.2168\/LMCS-9(4:23)2013"},{"key":"S0956796820000027_ref59","first-page":"80","volume-title":"In European Symposium on Programming","author":"Plotkin","year":"2009"},{"key":"S0956796820000027_ref57","unstructured":"Pir\u00f3g, M. , Polesiuk, P. & Sieczkowski, F. (2019) Typed equivalence of effect handlers and delimited control. In Formal Structures for Computation and Deduction. LIPIcs. Schloss Dagstuhl\u2013Leibniz-Zentrum f\u00fcr Informatik, pp. 30:1\u201330:16."},{"key":"S0956796820000027_ref56","first-page":"13:1","article-title":"Unifying analytic and statically-typed quasiquotes","volume":"2","author":"Parreaux","year":"2017","journal-title":"Proc. ACM Program. Lang."},{"key":"S0956796820000027_ref53","first-page":"41","volume-title":"In Proceedings of the Conference on Object-Oriented Programming, Systems, Languages and Applications","author":"Odersky","year":"2005"},{"key":"S0956796820000027_ref52","unstructured":"Odersky, M. & Zenger, M. (2005a) Independently extensible solutions to the expression problem. In Proceedings of the Workshop on Foundations of Object-Oriented Languages."},{"key":"S0956796820000027_ref51","first-page":"42:1","article-title":"Simplicitly: Foundations and applications of implicit function types","volume":"2","author":"Odersky","year":"2017","journal-title":"Proc. ACM Program. Lang."},{"key":"S0956796820000027_ref50","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796801004154"},{"key":"S0956796820000027_ref49","first-page":"81","volume-title":"In Proceedings of the International Conference on Functional Programming","author":"Materzok","year":"2011"},{"key":"S0956796820000027_ref18","doi-asserted-by":"publisher","DOI":"10.1145\/3110257"},{"key":"S0956796820000027_ref31","first-page":"94","volume-title":"In Proceedings of the Haskell Symposium","author":"Kiselyov","year":"2015"},{"key":"S0956796820000027_ref17","first-page":"180","volume-title":"In Proceedings of the Symposium on Principles of Programming Languages","author":"Felleisen","year":"1988"},{"key":"S0956796820000027_ref64","doi-asserted-by":"publisher","DOI":"10.1006\/inco.1994.1093"},{"key":"S0956796820000027_ref30","first-page":"145","volume-title":"In Proceedings of the International Conference on Functional Programming","author":"Kammar","year":"2013"},{"key":"S0956796820000027_ref46","article-title":"Encapsulating effects","volume":"8","author":"Lindley","year":"2018","journal-title":"Dagstuhl Reports"},{"key":"S0956796820000027_ref67","first-page":"281","volume-title":"Proceedings of the Conference on Programming Language Design and Implementation","author":"Zhang","year":"2016"},{"key":"S0956796820000027_ref32","volume-title":"In Proceedings of the Haskell Symposium. Haskell\u201908","author":"Kiselyov","year":"2008"},{"key":"S0956796820000027_ref14","unstructured":"Dolan, S. , White, L. & Madhavapeddy, A. (2014) Multicore OCaml. In OCaml Workshop."},{"key":"S0956796820000027_ref61","doi-asserted-by":"publisher","DOI":"10.1145\/3360571"},{"key":"S0956796820000027_ref28","volume-title":"In Proceedings of the 2018 ACM SIGPLAN International Symposium on New Ideas, New Paradigms, and Reflections on Programming and Software. Onward! 2018","author":"Inostroza","year":"2018"},{"key":"S0956796820000027_ref22","first-page":"272","volume-title":"In Proceedings of the Conference on Object-Oriented Programming, Systems, Languages and Applications","author":"Haller","year":"2016"},{"key":"S0956796820000027_ref13","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-319-89719-6_6"},{"key":"S0956796820000027_ref58","doi-asserted-by":"publisher","DOI":"10.1023\/A:1023064908962"},{"key":"S0956796820000027_ref12","first-page":"151","volume-title":"In Proceedings of the Conference on LISP and Functional Programming","author":"Danvy","year":"1990"},{"key":"S0956796820000027_ref2","first-page":"108","article-title":"Programming with algebraic effects and handlers","volume":"84","author":"Bauer","year":"2015","journal-title":"J. Log. Alg. Methods Program."},{"key":"S0956796820000027_ref20","unstructured":"Gaster, B. R. & Jones, M. P. (1996) A Polymorphic Type System for Extensible Records and Variants. Technical report NOTTCS-TR-96-3."},{"key":"S0956796820000027_ref48","unstructured":"Liu, F. (2016) A Study of Capability-Based Effect Systems. M.Phil. thesis, \u00c9cole Polytechnique F\u00e9d\u00e9rale de Lausanne, Switzerland."},{"key":"S0956796820000027_ref44","first-page":"51","volume-title":"In Proceedings of the Workshop on Type-Driven Development","author":"Leijen","year":"2018"},{"key":"S0956796820000027_ref3","unstructured":"Biernacki, D. , Pir\u00f3g, M. , Polesiuk, P. , & Sieczkowski, F. (2017) Handle with care: Relational interpretation of algebraic effects and handlers. Proc. ACM Program. Lang. 2(POPL), 8:1\u20138:30."},{"key":"S0956796820000027_ref15","unstructured":"Dolan, S. , White, L. , Sivaramakrishnan, K. C. , Yallop, J. & Madhavapeddy, A. (2015) Effective concurrency through algebraic effects. In OCaml Workshop."},{"key":"S0956796820000027_ref10","doi-asserted-by":"publisher","DOI":"10.1017\/S0960129500001535"},{"key":"S0956796820000027_ref6","doi-asserted-by":"publisher","DOI":"10.1145\/3276481"},{"key":"S0956796820000027_ref1","first-page":"838","volume-title":"In Proceedings of the Conference on Object-Oriented Programming, Systems, Languages and Applications","author":"Amin","year":"2016"},{"key":"S0956796820000027_ref11","unstructured":"Danvy, O. & Filinski, A. (1989) A functional abstraction of typed contexts. Diku rapport 89\/12, diku, University of Copenhagen."},{"key":"S0956796820000027_ref9","doi-asserted-by":"crossref","unstructured":"Convent, L. , Lindley, S. , McBride, C. & McLaughlin, C. (2019) Doo Bee Doo Bee Doo. Technical report. The University of Edinburgh.","DOI":"10.1017\/S0956796820000039"},{"key":"S0956796820000027_ref5","volume-title":"In Proceedings of the International Symposium on Scala","author":"Brachth\u00e4user","year":"2017"},{"key":"S0956796820000027_ref54","first-page":"2","volume-title":"In Proceedings of the European Conference on Object-Oriented Programming","author":"Oliveira","year":"2012"},{"key":"S0956796820000027_ref7","first-page":"222","volume-title":"In Proceedings of the Asian Symposium on Programming Languages and Systems. LNCS, vol. 4807","author":"Carette","year":"2007"},{"key":"S0956796820000027_ref36","first-page":"26","volume-title":"In Proceedings of the International Conference on Functional Programming","author":"Kiselyov","year":"2006"},{"key":"S0956796820000027_ref26","unstructured":"Hillerstr\u00f6m, D. , Lindley, S. , Atkey, B. & Sivaramakrishnan, K. C. (2017) Continuation passing style for effect handlers. In Formal Structures for Computation and Deduction, LIPIcs, vol. 84. Schloss Dagstuhl\u2013Leibniz-Zentrum f\u00fcr Informatik."},{"key":"S0956796820000027_ref24","doi-asserted-by":"publisher","DOI":"10.1007\/BF01019946"},{"key":"S0956796820000027_ref25","volume-title":"In Proceedings of the Workshop on Type-Driven Development","author":"Hillerstr\u00f6m","year":"2016"},{"key":"S0956796820000027_ref62","doi-asserted-by":"publisher","DOI":"10.1007\/BF01806126"},{"key":"S0956796820000027_ref27","doi-asserted-by":"publisher","DOI":"10.1109\/ICSR.1998.685738"},{"key":"S0956796820000027_ref29","first-page":"158","volume-title":"In Proceedings of the Symposium on Principles of Programming Languages","author":"Johnson","year":"1988"},{"key":"S0956796820000027_ref43","first-page":"486","volume-title":"In Proceedings of the Symposium on Principles of Programming Languages","author":"Leijen","year":"2017"},{"key":"S0956796820000027_ref19","volume-title":"Program Transformation and Programming Environments","author":"Friedman","year":"1984"},{"key":"S0956796820000027_ref39","doi-asserted-by":"publisher","DOI":"10.4204\/EPTCS.153.8"},{"key":"S0956796820000027_ref33","unstructured":"Kiselyov, O. & Sivaramakrishnan, K. C. (2016). Eff directly in OCaml. In ML Workshop."},{"key":"S0956796820000027_ref47","first-page":"500","volume-title":"In Proceedings of the Symposium on Principles of Programming Languages","author":"Lindley","year":"2017"},{"key":"S0956796820000027_ref34","doi-asserted-by":"publisher","DOI":"10.4204\/EPTCS.285.2"},{"key":"S0956796820000027_ref35","first-page":"59","volume-title":"In Proceedings of the Haskell Symposium","author":"Kiselyov","year":"2013"},{"key":"S0956796820000027_ref45","first-page":"333","volume-title":"In Proceedings of the Symposium on Principles of Programming Languages","author":"Liang","year":"1995"},{"key":"S0956796820000027_ref55","first-page":"234","volume-title":"In Proceedings of the Conference on Object-Oriented Programming, Systems, Languages and Applications","author":"Osvald","year":"2016"},{"key":"S0956796820000027_ref37","doi-asserted-by":"publisher","DOI":"10.4204\/EPTCS.212.3"},{"key":"S0956796820000027_ref16","doi-asserted-by":"crossref","first-page":"687","DOI":"10.1017\/S0956796807006259","article-title":"A monadic framework for delimited continuations","volume":"17","author":"Dybvig","year":"2007","journal-title":"J. Funct. Program."},{"key":"S0956796820000027_ref4","doi-asserted-by":"publisher","DOI":"10.1145\/3290319"},{"key":"S0956796820000027_ref42","first-page":"16","volume-title":"In Proceedings of the Workshop on Type-Driven Development","author":"Leijen","year":"2017"},{"key":"S0956796820000027_ref66","first-page":"1","article-title":"Abstraction-safe effect handlers via tunneling","volume":"3","author":"Zhang","year":"2019","journal-title":"Proc. ACM Program. Lang."},{"key":"S0956796820000027_ref23","first-page":"128","volume-title":"In Proceedings of the Second ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming. PPOPP\u201990","author":"Hieb","year":"1990"},{"key":"S0956796820000027_ref38","first-page":"227","volume-title":"In Proceedings of the International Conference on Functional Programming","author":"Launchbury","year":"1997"},{"key":"S0956796820000027_ref40","unstructured":"Leijen, D. (2016) Algebraic Effects for Functional Programming. Technical report MSR-TR-2016-29. Microsoft Research technical report."},{"key":"S0956796820000027_ref21","first-page":"12","volume-title":"In Proceedings of the Conference on Functional Programming Languages and Computer Architecture","author":"Gunter","year":"1995"},{"key":"S0956796820000027_ref41","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-319-71237-6_17"}],"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S0956796820000027","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T22:36:50Z","timestamp":1779835010000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S0956796820000027\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2020]]},"references-count":66,"alternative-id":["S0956796820000027"],"URL":"https:\/\/doi.org\/10.1017\/s0956796820000027","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[2020]]},"article-number":"e8"}}