{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,6,19]],"date-time":"2025-06-19T04:56:39Z","timestamp":1750308999348,"version":"3.41.0"},"reference-count":7,"publisher":"Association for Computing Machinery (ACM)","issue":"ICFP","license":[{"start":{"date-parts":[[2018,7,30]],"date-time":"2018-07-30T00:00:00Z","timestamp":1532908800000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0\/"}],"funder":[{"DOI":"10.13039\/100000001","name":"National Science Foundation","doi-asserted-by":"publisher","award":["1521539,1703835"],"award-info":[{"award-number":["1521539,1703835"]}],"id":[{"id":"10.13039\/100000001","id-type":"DOI","asserted-by":"publisher"}]}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2018,7,30]]},"abstract":"<jats:p>It is a straightforward exercise to write a program to \"add\" two bijections---resulting in a bijection between two sum types, which runs the first bijection on elements from the left summand and the second bijection on the right. It is much less obvious how to \"subtract\" one bijection from another. This problem has been studied in the context of combinatorics, with several computational principles known for producing the \"difference\" of two bijections. We consider the problem from a computational and algebraic perspective, showing how to construct such bijections at a high level, avoiding pointwise reasoning or being forced to construct the forward and backward directions separately---without sacrificing performance.<\/jats:p>","DOI":"10.1145\/3236796","type":"journal-article","created":{"date-parts":[[2018,7,31]],"date-time":"2018-07-31T19:41:18Z","timestamp":1533066078000},"page":"1-21","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":0,"title":["What\u2019s the difference? a functional pearl on subtracting bijections"],"prefix":"10.1145","volume":"2","author":[{"given":"Brent A.","family":"Yorgey","sequence":"first","affiliation":[{"name":"Hendrix College, USA"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Kenneth","family":"Foner","sequence":"additional","affiliation":[{"name":"University of Pennsylvania, USA"}],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"320","published-online":{"date-parts":[[2018,7,30]]},"reference":[{"key":"e_1_2_2_1_1","unstructured":"Conal Elliott. 2008. Elegant memoization with functional memo tries. (2008). http:\/\/conal.net\/blog\/posts\/ elegant- memoization- with- functional- memo- tries  Conal Elliott. 2008. Elegant memoization with functional memo tries. (2008). http:\/\/conal.net\/blog\/posts\/ elegant- memoization- with- functional- memo- tries"},{"key":"e_1_2_2_2_1","unstructured":"Conal Elliott. 2018. The MemoTrie package. (2018). http:\/\/hackage.haskell.org\/package\/MemoTrie  Conal Elliott. 2018. The MemoTrie package. (2018). http:\/\/hackage.haskell.org\/package\/MemoTrie"},{"key":"e_1_2_2_3_1","doi-asserted-by":"publisher","DOI":"10.1073\/pnas.78.4.2026"},{"key":"e_1_2_2_4_1","doi-asserted-by":"publisher","DOI":"10.1016\/0097-3165(83)90043-2"},{"volume-title":"Formalizing the translation method in Agda. Master\u2019s thesis","author":"Gu\u00f0mundsson Bjarki \u00c1g\u00fast","key":"e_1_2_2_5_1","unstructured":"Bjarki \u00c1g\u00fast Gu\u00f0mundsson . 2017. Formalizing the translation method in Agda. Master\u2019s thesis . Reykjavik University , Iceland . Bjarki \u00c1g\u00fast Gu\u00f0mundsson. 2017. Formalizing the translation method in Agda. Master\u2019s thesis. Reykjavik University, Iceland."},{"key":"e_1_2_2_6_1","doi-asserted-by":"publisher","DOI":"10.1017\/S0305004100074338"},{"key":"e_1_2_2_7_1","doi-asserted-by":"publisher","DOI":"10.1145\/2976002.2976013"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3236796","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3236796","content-type":"application\/pdf","content-version":"vor","intended-application":"syndication"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3236796","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T21:41:28Z","timestamp":1750282888000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3236796"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2018,7,30]]},"references-count":7,"journal-issue":{"issue":"ICFP","published-print":{"date-parts":[[2018,7,30]]}},"alternative-id":["10.1145\/3236796"],"URL":"https:\/\/doi.org\/10.1145\/3236796","relation":{},"ISSN":["2475-1421"],"issn-type":[{"type":"electronic","value":"2475-1421"}],"subject":[],"published":{"date-parts":[[2018,7,30]]},"assertion":[{"value":"2018-07-30","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}