{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T23:05:56Z","timestamp":1779836756142,"version":"3.53.1"},"reference-count":79,"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                    We explore the design and implementation of Frank, a strict functional programming language with a bidirectional effect type system designed from the ground up around a novel variant of Plotkin and Pretnar\u2019s effect handler abstraction. Effect handlers provide an abstraction for modular effectful programming: a handler acts as an interpreter for a collection of commands whose interfaces are statically tracked by the type system. However, Frank eliminates the need for an additional effect handling construct by generalising the basic mechanism of functional abstraction itself. A function is but the special case of a Frank\n                    <jats:italic>operator<\/jats:italic>\n                    that interprets no commands. Moreover, Frank\u2019s operators can be\n                    <jats:italic>multihandlers<\/jats:italic>\n                    which simultaneously interpret commands from several sources at once, without disturbing the direct style of functional programming with values. Effect typing in Frank employs a novel form of effect polymorphism which avoids mentioning effect variables in source code. This is achieved by propagating an\n                    <jats:italic>ambient ability<\/jats:italic>\n                    inwards, rather than accumulating unions of potential effects outwards. With the ambient ability describing the effects that are available at a certain point in the code, it can become necessary to reconfigure access to the ambient ability. A primary goal is to be able to encapsulate internal effects, eliminating a phenomenon we call\n                    <jats:italic>effect pollution<\/jats:italic>\n                    . Moreover, it is sometimes desirable to rewire the effect flow between effectful library components. We propose adaptors as a means for supporting both effect encapsulation and more general rewiring. Programming with effects and handlers is in its infancy. We contribute an exploration of future possibilities, particularly in combination with other forms of rich type systems.\n                  <\/jats:p>","DOI":"10.1017\/s0956796820000039","type":"journal-article","created":{"date-parts":[[2020,3,31]],"date-time":"2020-03-31T04:48:08Z","timestamp":1585630088000},"source":"Crossref","is-referenced-by-count":35,"title":["Doo bee doo bee doo"],"prefix":"10.1017","volume":"30","author":[{"ORCID":"https:\/\/orcid.org\/0000-0001-7862-0718","authenticated-orcid":false,"given":"LUKAS","family":"CONVENT","sequence":"first","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"SAM","family":"LINDLEY","sequence":"additional","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"CONOR","family":"MCBRIDE","sequence":"additional","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"CRAIG","family":"MCLAUGHLIN","sequence":"additional","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"56","published-online":{"date-parts":[[2020,3,31]]},"reference":[{"key":"S0956796820000039_ref78","first-page":"1","volume-title":"Haskell","author":"Wu","year":"2014"},{"key":"S0956796820000039_ref76","first-page":"60","volume-title":"In POPL","author":"Wadler","year":"1989"},{"key":"S0956796820000039_ref73","first-page":"133","volume-title":"Haskell","author":"van der Ploeg","year":"2014"},{"key":"S0956796820000039_ref70","first-page":"15","volume-title":"In ICFP","author":"Swamy","year":"2011"},{"key":"S0956796820000039_ref69","first-page":"58","volume-title":"ICFP","author":"Shivers","year":"2011"},{"key":"S0956796820000039_ref68","first-page":"259","volume-title":"In PPDP","author":"Schrijvers","year":"2014"},{"key":"S0956796820000039_ref65","unstructured":"Pretnar, M. (2009) The Logic and Handling of Algebraic Effects. Ph.D. thesis, School of Informatics, The University of Edinburgh."},{"key":"S0956796820000039_ref64","doi-asserted-by":"publisher","DOI":"10.2168\/LMCS-9(4:23)2013"},{"key":"S0956796820000039_ref63","doi-asserted-by":"publisher","DOI":"10.1023\/A:1023064908962"},{"key":"S0956796820000039_ref60","first-page":"1","volume-title":"In FoSSaCS. LNCS","volume":"2030","author":"Plotkin","year":"2001"},{"key":"S0956796820000039_ref58","doi-asserted-by":"publisher","DOI":"10.1145\/345099.345100"},{"key":"S0956796820000039_ref57","volume-title":"Mindstorms: Children, Computers, and Powerful Ideas","author":"Papert","year":"1980"},{"key":"S0956796820000039_ref56","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796807006326"},{"key":"S0956796820000039_ref55","unstructured":"McBride, C. (2016). Shonky. Available at: https:\/\/github.com\/pigworker\/shonky."},{"key":"S0956796820000039_ref54","first-page":"257","volume-title":"MPC. Lecture Notes in Computer Science","author":"McBride","year":"2015"},{"key":"S0956796820000039_ref66","doi-asserted-by":"publisher","DOI":"10.2168\/LMCS-10(3:21)2014"},{"key":"S0956796820000039_ref53","unstructured":"McBride, C. (2012) Frank (0.3). Available at: http:\/\/hackage.haskell.org\/package\/Frank."},{"key":"S0956796820000039_ref51","unstructured":"McBride, C. (2007) How might effectful programs look? In Workshop on Effects and Type Theory. Available at: http:\/\/cs.ioc.ee\/efftt\/mcbride-slides.pdf."},{"key":"S0956796820000039_ref75","first-page":"1","volume-title":"In POPL","author":"Wadler","year":"1992"},{"key":"S0956796820000039_ref50","doi-asserted-by":"publisher","DOI":"10.1145\/800055.802036"},{"key":"S0956796820000039_ref49","first-page":"47","volume-title":"In POPL","author":"Lucassen","year":"1988"},{"key":"S0956796820000039_ref47","first-page":"47","volume-title":"WGP@ICFP","author":"Lindley","year":"2014"},{"key":"S0956796820000039_ref20","doi-asserted-by":"crossref","first-page":"429","DOI":"10.1145\/2500365.2500582","volume-title":"In Proceedings of the 18th ACM SIGPLAN International Conference on Functional Programming. ICFP\u201913","author":"Dunfield","year":"2013"},{"key":"S0956796820000039_ref18","first-page":"266","volume-title":"In FMCO. LNCS","author":"Cooper","year":"2006"},{"key":"S0956796820000039_ref16","unstructured":"Convent, L. (2017). Enhancing a Modular Effectful Programming Language. MSc thesis, School of Informatics, The University of Edinburgh."},{"key":"S0956796820000039_ref52","unstructured":"McBride, C. (2011) Kleisli arrows of outrageous fortune. Available at: https:\/\/personal.cis.strath.ac.uk\/conor.mcbride\/Kleisli.pdf."},{"key":"S0956796820000039_ref28","unstructured":"Gundry, A. M. (2013) Type Inference, Haskell and Dependent Types. Ph.D. thesis, University of Strathclyde."},{"key":"S0956796820000039_ref15","first-page":"133","volume-title":"In ICFP","author":"Brady","year":"2013"},{"key":"S0956796820000039_ref38","first-page":"145","volume-title":"ICFP","author":"Kammar","year":"2013"},{"key":"S0956796820000039_ref21","doi-asserted-by":"publisher","DOI":"10.1145\/292540.292557"},{"key":"S0956796820000039_ref12","first-page":"1","article-title":"Effect handlers for the masses","volume":"2","author":"Brachth\u00e4user","year":"2018","journal-title":"PACMPL"},{"key":"S0956796820000039_ref7","first-page":"108","article-title":"Programming with algebraic effects and handlers","volume":"84","author":"Bauer","year":"2015","journal-title":"J. log. Alg. Meth. Program."},{"key":"S0956796820000039_ref6","doi-asserted-by":"publisher","DOI":"10.2168\/LMCS-10(4:9)2014"},{"key":"S0956796820000039_ref3","unstructured":"Ahman, D. (2017) Fibred Computational Effects. Ph.D. thesis, School of Informatics, The University of Edinburgh."},{"key":"S0956796820000039_ref72","doi-asserted-by":"publisher","DOI":"10.1006\/inco.1994.1046"},{"key":"S0956796820000039_ref5","first-page":"197","volume-title":"In ICFP","author":"Atkey","year":"2013"},{"key":"S0956796820000039_ref36","first-page":"111","volume-title":"In Onward!","author":"Inostroza","year":"2018"},{"key":"S0956796820000039_ref46","volume-title":"Call-By-Push-Value: A Functional\/Imperative Synthesis","author":"Levy","year":"2004"},{"key":"S0956796820000039_ref4","unstructured":"Atkey, R. (2015) An Algebraic Approach to Typechecking and Elaboration. https:\/\/bentnib.org\/posts\/2015-04-19-algebraic-approach-typechecking-and-elaboration.html"},{"key":"S0956796820000039_ref23","first-page":"1","article-title":"On the expressive power of user-defined effects: Effect handlers, monadic reflection, delimited control","volume":"1","author":"Forster","year":"2017","journal-title":"PACMPL"},{"key":"S0956796820000039_ref29","doi-asserted-by":"publisher","DOI":"10.1016\/j.apal.2005.05.022"},{"key":"S0956796820000039_ref32","first-page":"15","volume-title":"TyDe@ICFP","author":"Hillerstr\u00f6m","year":"2016"},{"key":"S0956796820000039_ref59","unstructured":"Pir\u00f3g, M. , Polesiuk, P. & Sieczkowski, F. (2019) Typed equivalence of effect handlers and delimited control. In FSCD. LIPIcs, vol. 131. Schloss Dagstuhl - Leibniz-Zentrum fuer Informatik, pp. 30:1\u201330:16."},{"key":"S0956796820000039_ref48","first-page":"500","volume-title":"In POPL","author":"Lindley","year":"2017"},{"key":"S0956796820000039_ref1","first-page":"185","volume-title":"In ICFP","author":"Abel","year":"2013"},{"key":"S0956796820000039_ref22","first-page":"483","volume-title":"In POPL","author":"Filinski","year":"2010"},{"key":"S0956796820000039_ref19","unstructured":"Dolan, S. , White, L. , Sivaramakrishnan, K. C. , Yallop, J. & Madhavapeddy, A. (2015) Effective concurrency through algebraic effects. In OCaml Workshop."},{"key":"S0956796820000039_ref71","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796808006758"},{"key":"S0956796820000039_ref67","first-page":"98","volume-title":"Haskell@ICFP","author":"Schrijvers","year":"2019"},{"key":"S0956796820000039_ref8","first-page":"8:1","article-title":"Handle with care: Relational interpretation of algebraic effects and handlers","volume":"2","author":"Biernacki","year":"2018","journal-title":"PACMPL"},{"key":"S0956796820000039_ref13","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796820000027"},{"key":"S0956796820000039_ref44","unstructured":"Leijen, D. (2018) Algebraic Effect Handlers with Resources and Deep Finalization. Technical report. Microsoft Research."},{"key":"S0956796820000039_ref37","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-662-21554-8"},{"key":"S0956796820000039_ref40","doi-asserted-by":"publisher","DOI":"10.1145\/2503778.2503791"},{"key":"S0956796820000039_ref14","doi-asserted-by":"publisher","DOI":"10.1017\/S095679681300018X"},{"key":"S0956796820000039_ref9","first-page":"1","article-title":"Abstracting algebraic effects","volume":"3","author":"Biernacki","year":"2019","journal-title":"PACMPL"},{"key":"S0956796820000039_ref10","first-page":"1","article-title":"Binders by day, labels by night: Effect instances via lexically scoped handlers","volume":"4","author":"Biernacki","journal-title":"PACMPL"},{"key":"S0956796820000039_ref17","unstructured":"Convent, L. , Lindley, S. , McBride, C. & McLaughlin, C. (2020) Frank repository. Available at: https:\/\/www.github.com\/frank-lang\/frank."},{"key":"S0956796820000039_ref25","doi-asserted-by":"publisher","DOI":"10.1145\/237721.237805"},{"key":"S0956796820000039_ref26","unstructured":"Geron, B. (2019) Defined Algebraic Operations. Ph.D. thesis, University of Birmingham."},{"key":"S0956796820000039_ref61","doi-asserted-by":"publisher","DOI":"10.1016\/S1571-0661(04)80970-8"},{"key":"S0956796820000039_ref27","doi-asserted-by":"publisher","DOI":"10.1145\/1863597.1863608"},{"key":"S0956796820000039_ref62","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-45931-6_24"},{"key":"S0956796820000039_ref30","unstructured":"Hillerstr\u00f6m, D. (2015) Handlers for Algebraic Effects in Links. MSc thesis, School of Informatics, The University of Edinburgh."},{"key":"S0956796820000039_ref79","first-page":"1","article-title":"Abstraction-safe effect handlers via tunneling","volume":"3","author":"Zhang","year":"2019","journal-title":"PACMPL"},{"key":"S0956796820000039_ref77","first-page":"302","volume-title":"MPC. Lecture Notes in Computer Science","author":"Wu","year":"2015"},{"key":"S0956796820000039_ref24","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796819000121"},{"key":"S0956796820000039_ref31","unstructured":"Hillerstr\u00f6m, D. (2016) Compilation of Effect Handlers and their Applications in Concurrency. MSc(R) thesis, School of Informatics, The University of Edinburgh."},{"key":"S0956796820000039_ref74","unstructured":"Vonnegut, K. (1982) Deadeye Dick. Delacorte."},{"key":"S0956796820000039_ref39","doi-asserted-by":"publisher","DOI":"10.1145\/2804302.2804319"},{"key":"S0956796820000039_ref33","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796820000040"},{"key":"S0956796820000039_ref34","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796897002864"},{"key":"S0956796820000039_ref11","doi-asserted-by":"publisher","DOI":"10.1145\/3136000.3136007"},{"key":"S0956796820000039_ref35","first-page":"73","volume-title":"Advanced Functional Programming","author":"Hughes","year":"2004"},{"key":"S0956796820000039_ref41","unstructured":"Kmett, E. A. (2015). Trifecta (1.5.2). Available at: http:\/\/hackage.haskell.org\/package\/trifecta-1.5.2."},{"key":"S0956796820000039_ref2","volume-title":"Haskell","author":"Adams","year":"2014"},{"key":"S0956796820000039_ref45","unstructured":"Leijen, D. & Martini, P. (2015) Parsec (3.1.9). Available at: http:\/\/hackage.haskell.org\/package\/parsec-3.1.9."},{"key":"S0956796820000039_ref42","doi-asserted-by":"publisher","DOI":"10.4204\/EPTCS.153.8"},{"key":"S0956796820000039_ref43","first-page":"486","volume-title":"In POPL","author":"Leijen","year":"2017"}],"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S0956796820000039","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\/S0956796820000039\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2020]]},"references-count":79,"alternative-id":["S0956796820000039"],"URL":"https:\/\/doi.org\/10.1017\/s0956796820000039","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":"e9"}}