{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,10,9]],"date-time":"2025-10-09T21:14:59Z","timestamp":1760044499950,"version":"3.41.0"},"reference-count":45,"publisher":"Association for Computing Machinery (ACM)","issue":"ICFP","license":[{"start":{"date-parts":[[2019,7,26]],"date-time":"2019-07-26T00:00:00Z","timestamp":1564099200000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/www.acm.org\/publications\/policies\/copyright_policy#Background"}],"funder":[{"DOI":"10.13039\/501100000288","name":"Royal Society","doi-asserted-by":"crossref","award":["IF160117"],"award-info":[{"award-number":["IF160117"]}],"id":[{"id":"10.13039\/501100000288","id-type":"DOI","asserted-by":"crossref"}]}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2019,7,26]]},"abstract":"<jats:p>Applicative functors and monads have conquered the world of functional programming by providing general and powerful ways of describing effectful computations using pure functions. Applicative functors provide a way to compose independent effects that cannot depend on values produced by earlier computations, and all of which are declared statically. Monads extend the applicative interface by making it possible to compose dependent effects, where the value computed by one effect determines all subsequent effects, dynamically.<\/jats:p>\n          <jats:p>This paper introduces an intermediate abstraction called selective applicative functors that requires all effects to be declared statically, but provides a way to select which of the effects to execute dynamically. We demonstrate applications of the new abstraction on several examples, including two industrial case studies.<\/jats:p>","DOI":"10.1145\/3341694","type":"journal-article","created":{"date-parts":[[2019,7,29]],"date-time":"2019-07-29T20:55:51Z","timestamp":1564433751000},"page":"1-29","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":12,"title":["Selective applicative functors"],"prefix":"10.1145","volume":"3","author":[{"given":"Andrey","family":"Mokhov","sequence":"first","affiliation":[{"name":"Newcastle University, UK"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Georgy","family":"Lukyanov","sequence":"additional","affiliation":[{"name":"Newcastle University, UK"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Simon","family":"Marlow","sequence":"additional","affiliation":[{"name":"Facebook, UK"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Jeremie","family":"Dimino","sequence":"additional","affiliation":[{"name":"Jane Street, UK"}],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"320","published-online":{"date-parts":[[2019,7,26]]},"reference":[{"key":"e_1_2_2_1_1","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796801004099"},{"volume-title":"Interactive theorem proving and program development: Coq\u2019Art: the calculus of inductive constructions","author":"Bertot Yves","key":"e_1_2_2_2_1","unstructured":"Yves Bertot and Pierre Cast\u00e9ran . 2013. Interactive theorem proving and program development: Coq\u2019Art: the calculus of inductive constructions . Springer Science & amp; Business Media. Yves Bertot and Pierre Cast\u00e9ran. 2013. Interactive theorem proving and program development: Coq\u2019Art: the calculus of inductive constructions. Springer Science &amp; Business Media."},{"key":"e_1_2_2_3_1","unstructured":"Chris Birchall and Hamish Dickson. 2019. Implementation of selective applicative functors in Scala. (2019). https:\/\/web.archive.org\/web\/20190623214126\/https:\/\/github.com\/cb372\/cats- selective\/blob\/master\/core\/src\/main\/ scala\/cats\/Selective.scala .  Chris Birchall and Hamish Dickson. 2019. Implementation of selective applicative functors in Scala. (2019). https:\/\/web.archive.org\/web\/20190623214126\/https:\/\/github.com\/cb372\/cats- selective\/blob\/master\/core\/src\/main\/ scala\/cats\/Selective.scala ."},{"key":"e_1_2_2_4_1","volume-title":"Deriving Via. In Proceedings of the 11th ACM Haskell Symposium (Haskell\u201918)","author":"Bl\u00f6ndal Baldur","year":"2018","unstructured":"Baldur Bl\u00f6ndal , Andres L\u00f6h , and Ryan Scott . 2018 . Deriving Via. In Proceedings of the 11th ACM Haskell Symposium (Haskell\u201918) . Baldur Bl\u00f6ndal, Andres L\u00f6h, and Ryan Scott. 2018. Deriving Via. In Proceedings of the 11th ACM Haskell Symposium (Haskell\u201918)."},{"key":"e_1_2_2_5_1","doi-asserted-by":"publisher","DOI":"10.4204\/EPTCS.153.2"},{"key":"e_1_2_2_6_1","doi-asserted-by":"publisher","DOI":"10.1145\/641675.642111"},{"key":"e_1_2_2_7_1","doi-asserted-by":"publisher","DOI":"10.1145\/2426890.2426910"},{"key":"e_1_2_2_8_1","unstructured":"Will Fancher. 2016. More on Applicative Effects in Free Monads. (2016). https:\/\/web.archive.org\/web\/20190307232337\/https: \/\/elvishjerricco.github.io\/2016\/04\/13\/more- on- applicative- effects- in- free- monads.html .  Will Fancher. 2016. More on Applicative Effects in Free Monads. (2016). https:\/\/web.archive.org\/web\/20190307232337\/https: \/\/elvishjerricco.github.io\/2016\/04\/13\/more- on- applicative- effects- in- free- monads.html ."},{"key":"e_1_2_2_9_1","volume-title":"https:\/\/web.archive.org\/web\/20190307232429\/https: \/\/elvishjerricco.github.io\/2017\/03\/10\/profunctors- arrows- and- static- analysis.html","author":"Fancher Will","year":"2017","unstructured":"Will Fancher . 2017. Profunctors, Arrows, &amp; Static Analysis . ( 2017 ). https:\/\/web.archive.org\/web\/20190307232429\/https: \/\/elvishjerricco.github.io\/2017\/03\/10\/profunctors- arrows- and- static- analysis.html . Will Fancher. 2017. Profunctors, Arrows, &amp; Static Analysis. (2017). https:\/\/web.archive.org\/web\/20190307232429\/https: \/\/elvishjerricco.github.io\/2017\/03\/10\/profunctors- arrows- and- static- analysis.html ."},{"key":"e_1_2_2_10_1","doi-asserted-by":"publisher","DOI":"10.1145\/2976002.2976005"},{"key":"e_1_2_2_11_1","unstructured":"Richard Gibson. 2019. Implementation of selective applicative functors in Kotlin. (2019). https:\/\/web. archive.org\/web\/20190623213927\/https:\/\/github.com\/arrow- kt\/arrow\/blob\/master\/modules\/core\/arrow- coredata\/src\/main\/kotlin\/arrow\/typeclasses\/Selective.kt .  Richard Gibson. 2019. Implementation of selective applicative functors in Kotlin. (2019). https:\/\/web. archive.org\/web\/20190623213927\/https:\/\/github.com\/arrow- kt\/arrow\/blob\/master\/modules\/core\/arrow- coredata\/src\/main\/kotlin\/arrow\/typeclasses\/Selective.kt ."},{"key":"e_1_2_2_12_1","doi-asserted-by":"publisher","DOI":"10.1145\/2804302.2804311"},{"key":"e_1_2_2_13_1","volume-title":"https:\/\/web.archive.org\/web\/20110321191234\/http:\/\/existentialtype. wordpress.com\/2011\/03\/15\/boolean- blindness\/","author":"Harper Robert","year":"2011","unstructured":"Robert Harper . 2011. Boolean Blindness . ( 2011 ). https:\/\/web.archive.org\/web\/20110321191234\/http:\/\/existentialtype. wordpress.com\/2011\/03\/15\/boolean- blindness\/ . Robert Harper. 2011. Boolean Blindness. (2011). https:\/\/web.archive.org\/web\/20110321191234\/http:\/\/existentialtype. wordpress.com\/2011\/03\/15\/boolean- blindness\/ ."},{"key":"e_1_2_2_14_1","unstructured":"Antti Holvikari. 2018. Implementation of selective applicative functors in PureScript. (2018). https:\/\/web.archive.org\/web\/ 20190623214040\/https:\/\/github.com\/anttih\/purescript- selective\/blob\/master\/src\/Control\/Selective.purs .  Antti Holvikari. 2018. Implementation of selective applicative functors in PureScript. (2018). https:\/\/web.archive.org\/web\/ 20190623214040\/https:\/\/github.com\/anttih\/purescript- selective\/blob\/master\/src\/Control\/Selective.purs ."},{"key":"e_1_2_2_15_1","doi-asserted-by":"publisher","DOI":"10.1016\/S0167-6423(99)00023-4"},{"key":"e_1_2_2_16_1","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796898003050"},{"key":"e_1_2_2_17_1","volume-title":"Incremental: A library for incremental computations. Bind, scopes, and invalidation.","author":"Street Jane","year":"2015","unstructured":"Jane Street . 2015 . Incremental: A library for incremental computations. Bind, scopes, and invalidation. (2015). https:\/\/web.archive.org\/web\/20190709231158\/https:\/\/ocaml.janestreet.com\/ocaml- core\/latest\/doc\/incremental\/ Incremental __\/Incremental_intf\/#bind, - scopes, - and- invalidation . Jane Street. 2015. Incremental: A library for incremental computations. Bind, scopes, and invalidation. (2015). https:\/\/web.archive.org\/web\/20190709231158\/https:\/\/ocaml.janestreet.com\/ocaml- core\/latest\/doc\/incremental\/ Incremental__\/Incremental_intf\/#bind, - scopes, - and- invalidation ."},{"key":"e_1_2_2_18_1","volume-title":"Dune: A composable build system.","author":"Street Jane","year":"2018","unstructured":"Jane Street . 2018 . Dune: A composable build system. (2018). https:\/\/dune.build\/ . Jane Street. 2018. Dune: A composable build system. (2018). https:\/\/dune.build\/ ."},{"key":"e_1_2_2_19_1","doi-asserted-by":"publisher","DOI":"10.1145\/2804302.2804319"},{"key":"e_1_2_2_20_1","doi-asserted-by":"publisher","DOI":"10.1145\/331963.331977"},{"key":"e_1_2_2_21_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.entcs.2011.02.018"},{"key":"e_1_2_2_22_1","unstructured":"Georgy Lukyanov. 2019. Implementation of selective applicative functors in Coq. (2019). https:\/\/web.archive.org\/web\/ 20190623213821\/https:\/\/github.com\/tuura\/selective- theory- coq\/blob\/master\/src\/Control\/Selective.v .  Georgy Lukyanov. 2019. Implementation of selective applicative functors in Coq. (2019). https:\/\/web.archive.org\/web\/ 20190623213821\/https:\/\/github.com\/tuura\/selective- theory- coq\/blob\/master\/src\/Control\/Selective.v ."},{"key":"e_1_2_2_23_1","doi-asserted-by":"publisher","DOI":"10.1145\/2692915.2628144"},{"key":"e_1_2_2_24_1","doi-asserted-by":"publisher","DOI":"10.1145\/2976002.2976007"},{"key":"e_1_2_2_25_1","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796807006326"},{"key":"e_1_2_2_26_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-34407-7_11"},{"key":"e_1_2_2_27_1","unstructured":"Dave Menendez. 2013. Free Applicative Functors in Haskell. (2013). https:\/\/web.archive.org\/web\/20190625202450\/https: \/\/www.eyrie.org\/~zednenem\/2013\/05\/27\/freeapp .  Dave Menendez. 2013. Free Applicative Functors in Haskell. (2013). https:\/\/web.archive.org\/web\/20190625202450\/https: \/\/www.eyrie.org\/~zednenem\/2013\/05\/27\/freeapp ."},{"key":"e_1_2_2_28_1","doi-asserted-by":"publisher","DOI":"10.1016\/0890-5401(91)90052-4"},{"key":"e_1_2_2_30_1","doi-asserted-by":"publisher","DOI":"10.1145\/3341694"},{"key":"e_1_2_2_31_1","doi-asserted-by":"publisher","DOI":"10.1145\/3341694"},{"key":"e_1_2_2_32_1","doi-asserted-by":"publisher","DOI":"10.1145\/3236774"},{"key":"e_1_2_2_33_1","doi-asserted-by":"publisher","DOI":"10.1145\/507669.507664"},{"key":"e_1_2_2_34_1","unstructured":"Daniel Peebles. 2019. Sigma Selective. (2019). http:\/\/web.archive.org\/web\/20190625225137\/https:\/\/gist.github.com\/ copumpkin\/d5bdbc7afda54ff04049b6bdbcffb67e .  Daniel Peebles. 2019. Sigma Selective. (2019). http:\/\/web.archive.org\/web\/20190625225137\/https:\/\/gist.github.com\/ copumpkin\/d5bdbc7afda54ff04049b6bdbcffb67e ."},{"key":"e_1_2_2_35_1","unstructured":"Evgeny Permyakov et al. 2012. Applicative functors with branch\/choice. (2012). https:\/\/web.archive.org\/web\/20190626004303\/ https:\/\/mail.haskell.org\/pipermail\/haskell- cafe\/2012- July\/102518.html .  Evgeny Permyakov et al. 2012. Applicative functors with branch\/choice. (2012). https:\/\/web.archive.org\/web\/20190626004303\/ https:\/\/mail.haskell.org\/pipermail\/haskell- cafe\/2012- July\/102518.html ."},{"key":"e_1_2_2_36_1","volume-title":"Profunctor optics: Modular data accessors. Art, Science, and Engineering of Programming 1, 2","author":"Pickering Matthew","year":"2017","unstructured":"Matthew Pickering , Jeremy Gibbons , and Nicolas Wu. 2017. Profunctor optics: Modular data accessors. Art, Science, and Engineering of Programming 1, 2 ( 2017 ). Matthew Pickering, Jeremy Gibbons, and Nicolas Wu. 2017. Profunctor optics: Modular data accessors. Art, Science, and Engineering of Programming 1, 2 (2017)."},{"key":"e_1_2_2_37_1","volume-title":"Notions of computation as monoids. Journal of functional programming 27","author":"Rivas Exequiel","year":"2017","unstructured":"Exequiel Rivas and Mauro Jaskelioff . 2017. Notions of computation as monoids. Journal of functional programming 27 ( 2017 ). Exequiel Rivas and Mauro Jaskelioff. 2017. Notions of computation as monoids. Journal of functional programming 27 (2017)."},{"key":"e_1_2_2_38_1","unstructured":"Tom\u00e1s Ruiz-L\u00f3pez. 2019. Implementation of selective applicative functors in Swift. (2019). https:\/\/web.archive.org\/save\/https: \/\/github.com\/bow- swift\/bow\/blob\/master\/Sources\/Bow\/Typeclasses\/Selective.swift .  Tom\u00e1s Ruiz-L\u00f3pez. 2019. Implementation of selective applicative functors in Swift. (2019). https:\/\/web.archive.org\/save\/https: \/\/github.com\/bow- swift\/bow\/blob\/master\/Sources\/Bow\/Typeclasses\/Selective.swift ."},{"key":"e_1_2_2_39_1","doi-asserted-by":"publisher","DOI":"10.1145\/1543134.1411292"},{"volume-title":"Automation &amp","author":"Sokolov Danil","key":"e_1_2_2_40_1","unstructured":"Danil Sokolov , Alessandro de Gennaro , and Andrey Mokhov . 2018. Reconfigurable asynchronous pipelines: From formal models to silicon. In 2018 Design , Automation &amp ; Test in Europe Conference &amp; Exhibition (DATE). IEEE , 1562\u20131567. Danil Sokolov, Alessandro de Gennaro, and Andrey Mokhov. 2018. Reconfigurable asynchronous pipelines: From formal models to silicon. In 2018 Design, Automation &amp; Test in Europe Conference &amp; Exhibition (DATE). IEEE, 1562\u20131567."},{"volume-title":"International School on Advanced Functional Programming","author":"Doaitse Swierstra S","key":"e_1_2_2_41_1","unstructured":"S Doaitse Swierstra and Luc Duponcheel . 1996. Deterministic, error-correcting combinator parsers . In International School on Advanced Functional Programming . Springer , 184\u2013207. S Doaitse Swierstra and Luc Duponcheel. 1996. Deterministic, error-correcting combinator parsers. In International School on Advanced Functional Programming. Springer, 184\u2013207."},{"key":"e_1_2_2_42_1","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796808006758"},{"key":"e_1_2_2_43_1","unstructured":"The OPAM team. 2018. OCaml Package Manager. (2018). https:\/\/opam.ocaml.org\/ .  The OPAM team. 2018. OCaml Package Manager. (2018). https:\/\/opam.ocaml.org\/ ."},{"key":"e_1_2_2_44_1","doi-asserted-by":"publisher","DOI":"10.1145\/99370.99404"},{"volume-title":"Int\u2019l School on Advanced Functional Programming","author":"Wadler P.","key":"e_1_2_2_45_1","unstructured":"P. Wadler . 1995. Monads for functional programming . In Int\u2019l School on Advanced Functional Programming . Springer , 24\u201352. P. Wadler. 1995. Monads for functional programming. In Int\u2019l School on Advanced Functional Programming. Springer, 24\u201352."},{"key":"e_1_2_2_47_1","unstructured":"Brent Yorgey et al. 2009. An IRC conversation about Branchy type class. (2009). https:\/\/web.archive.org\/web\/20190626003950\/ https:\/\/github.com\/snowleopard\/selective\/blob\/master\/paper\/irc- log- branchy.md .  Brent Yorgey et al. 2009. An IRC conversation about Branchy type class. (2009). https:\/\/web.archive.org\/web\/20190626003950\/ https:\/\/github.com\/snowleopard\/selective\/blob\/master\/paper\/irc- log- branchy.md ."}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3341694","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3341694","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,17]],"date-time":"2025-06-17T22:41:30Z","timestamp":1750200090000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3341694"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2019,7,26]]},"references-count":45,"journal-issue":{"issue":"ICFP","published-print":{"date-parts":[[2019,7,26]]}},"alternative-id":["10.1145\/3341694"],"URL":"https:\/\/doi.org\/10.1145\/3341694","relation":{},"ISSN":["2475-1421"],"issn-type":[{"type":"electronic","value":"2475-1421"}],"subject":[],"published":{"date-parts":[[2019,7,26]]},"assertion":[{"value":"2019-07-26","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}