{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,7,16]],"date-time":"2026-07-16T11:12:04Z","timestamp":1784200324901,"version":"3.55.0"},"reference-count":39,"publisher":"Association for Computing Machinery (ACM)","issue":"OOPSLA2","content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2025,10,9]]},"abstract":"<jats:p>\n                    Type-directed overload resolution allows programmers to reuse the same name, offloading disambiguation to the type checker. Since many programming languages implement overload resolution by performing backtracking in the type checker, it is commonly believed to be incompatible with Hindley-Milner-style type systems. In this paper, we present an approach to overload resolution that combines insights from variational type checking and algebraic subtyping. We formalize and discuss our flow-based variational framework that captures the essence of overloads by representing them as\n                    <jats:italic toggle=\"yes\">choices<\/jats:italic>\n                    . This cleanly separates constraint collection, constraint solving, and overload resolution. We believe our framework not only gives rise to more modular and efficient implementations of type checkers, but also serves as a simpler mental model and paves the way for improved error messages.\n                  <\/jats:p>","DOI":"10.1145\/3763168","type":"journal-article","created":{"date-parts":[[2025,10,9]],"date-time":"2025-10-09T08:51:31Z","timestamp":1759999891000},"page":"3286-3312","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":0,"title":["The Simple Essence of Overloading: Making Ad-Hoc Polymorphism More Algebraic with Flow-Based Variational Type-Checking"],"prefix":"10.1145","volume":"9","author":[{"ORCID":"https:\/\/orcid.org\/0009-0002-1501-4870","authenticated-orcid":false,"given":"Ji\u0159\u00ed","family":"Bene\u0161","sequence":"first","affiliation":[{"name":"University of T\u00fcbingen, T\u00fcbingen, Germany"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"ORCID":"https:\/\/orcid.org\/0000-0001-9128-0391","authenticated-orcid":false,"given":"Jonathan Immanuel","family":"Brachth\u00e4user","sequence":"additional","affiliation":[{"name":"University of T\u00fcbingen, T\u00fcbingen, Germany"}],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"320","published-online":{"date-parts":[[2025,10,9]]},"reference":[{"key":"e_1_3_1_2_1","doi-asserted-by":"publisher","DOI":"10.1109\/TC.1978.1675141"},{"key":"e_1_3_1_3_1","volume-title":"The Lambda Calculus: Its Syntax and Semantics. Revised Edition","author":"Barendregt Henk P.","year":"1984","unstructured":"Henk P. Barendregt. 1984. The Lambda Calculus: Its Syntax and Semantics. Revised Edition. North-Holland, Amsterdam, The Netherlands."},{"key":"e_1_3_1_4_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-030-53288-8_28"},{"key":"e_1_3_1_5_1","doi-asserted-by":"publisher","unstructured":"Ji\u0159\u00ed Bene\u0161 and Jonathan Immanuel Brachth\u00e4user. 2025. Artifact of the paper \u2018The Simple Essence of Overloading\u2019. doi:10.5281\/zenodo.16928381","DOI":"10.5281\/zenodo.16928381"},{"key":"e_1_3_1_6_1","doi-asserted-by":"publisher","DOI":"10.1145\/3622812"},{"key":"e_1_3_1_7_1","doi-asserted-by":"publisher","DOI":"10.1145\/3546196.3550163"},{"key":"e_1_3_1_8_1","doi-asserted-by":"publisher","DOI":"10.3233\/SAT190085"},{"key":"e_1_3_1_9_1","volume-title":"Coming to terms with modal logic: On the interpretation of modalities in typed \u03bb-calculus. Dissertation","author":"Borghuis Valentijn Anton Johan","year":"1994","unstructured":"Valentijn Anton Johan Borghuis. 1994. Coming to terms with modal logic: On the interpretation of modalities in typed \u03bb-calculus. Dissertation. Technische Universiteit Eindhoven, Eindhoven."},{"key":"e_1_3_1_10_1","doi-asserted-by":"publisher","DOI":"10.1145\/3428194"},{"key":"e_1_3_1_11_1","doi-asserted-by":"publisher","DOI":"10.1109\/TC.1986.1676819"},{"key":"e_1_3_1_12_1","doi-asserted-by":"publisher","DOI":"10.2307\/2268610"},{"key":"e_1_3_1_13_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-031-34518-0_12"},{"key":"e_1_3_1_14_1","doi-asserted-by":"publisher","DOI":"10.1145\/141471.141537"},{"key":"e_1_3_1_15_1","doi-asserted-by":"publisher","DOI":"10.1145\/2518190"},{"key":"e_1_3_1_16_1","doi-asserted-by":"publisher","DOI":"10.1145\/3009837.3009882"},{"key":"e_1_3_1_17_1","doi-asserted-by":"publisher","DOI":"10.1145\/2430502.2430520"},{"key":"e_1_3_1_18_1","doi-asserted-by":"publisher","DOI":"10.1145\/2063239.2063245"},{"key":"e_1_3_1_19_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-1-4020-5571-3_8"},{"key":"e_1_3_1_20_1","unstructured":"Matt Gallagher. 2016. Exponential time complexity in the Swift type checker. https:\/\/www.cocoawithlove.com\/blog\/2016\/07\/12\/type-checker-issues.html."},{"key":"e_1_3_1_21_1","unstructured":"Adam Gundry. 2017. Overloaded Record Fields. https:\/\/github.com\/ghc-proposals\/ghc-proposals\/blob\/master\/proposals\/0023-overloaded-record-fields.rst. Haskell Proposal 23. Implemented in GHC 8.2. Accepted on 2017-02-04."},{"key":"e_1_3_1_22_1","unstructured":"Daniel Hooper. 2024. Why Swift\u2019s Type Checker Is So Slow. https:\/\/danielchasehooper.com\/posts\/why-swift-is-slow\/."},{"key":"e_1_3_1_23_1","unstructured":"Jules Jacobs. 2016. Types Mailing List: Congruence rules vs frames. https:\/\/lists.seas.upenn.edu\/pipermail\/types-list\/2021\/002383.html."},{"key":"e_1_3_1_24_1","doi-asserted-by":"publisher","DOI":"10.1016\/0167-6423(94)00005-0"},{"key":"e_1_3_1_25_1","doi-asserted-by":"publisher","DOI":"10.1145\/1868688.1868693"},{"key":"e_1_3_1_26_1","doi-asserted-by":"publisher","unstructured":"Daan Leijen. 2014. Koka: Programming with Row Polymorphic Effect Types In Proceedings of the Workshop on Mathematically Structured Functional Programming. Electronic Proceedings in Theoretical Computer Science. doi:10.4204\/eptcs.153.8","DOI":"10.4204\/eptcs.153.8"},{"key":"e_1_3_1_27_1","unstructured":"Eric Lippert. 2007. Lambda Expressions vs. Anonymous Methods Part Five. https:\/\/learn.microsoft.com\/en-us\/archive\/blogs\/ericlippert\/lambda-expressions-vs-anonymous-methods-part-five."},{"key":"e_1_3_1_28_1","unstructured":"Simon Marlow. 2010. Haskell 2010 Language Report. https:\/\/www.haskell.org\/onlinereport\/haskell2010\/."},{"key":"e_1_3_1_29_1","doi-asserted-by":"publisher","DOI":"10.1016\/0022-0000(78)90014-4"},{"key":"e_1_3_1_30_1","unstructured":"Neil Mitchell and Shayne Fletcher. 2020. Record Dot Syntax. https:\/\/github.com\/ghc-proposals\/ghc-proposals\/blob\/master\/proposals\/0282-record-dot-syntax.rst. Haskell Proposal 282. Implemented in GHC 9.2. Accepted on 2020-05-03."},{"key":"e_1_3_1_31_1","unstructured":"Bob Nystrom. 2024. Comment on \u201cHow does Scala have function overloading?\u201d. Reddit comment in r\/ProgrammingLanguages. https:\/\/www.reddit.com\/r\/ProgrammingLanguages\/comments\/1be7wdl\/comment\/kusavxy\/Accessed 2025-03-26."},{"key":"e_1_3_1_32_1","doi-asserted-by":"publisher","DOI":"10.1145\/224164.224195"},{"key":"e_1_3_1_33_1","doi-asserted-by":"publisher","DOI":"10.1145\/3409006"},{"key":"e_1_3_1_34_1","unstructured":"David Peter. 2024. hyperfine. A command-line benchmarking tool. https:\/\/github.com\/sharkdp\/hyperfine [Last access: 29-07-2025]."},{"key":"e_1_3_1_35_1","doi-asserted-by":"publisher","DOI":"10.4230\/LIPIcs.ECOOP.2022.25"},{"key":"e_1_3_1_36_1","doi-asserted-by":"publisher","DOI":"10.1145\/3571211"},{"key":"e_1_3_1_37_1","unstructured":"Jordan Rose. 2021. Swift Regret: Type-based Overloading. https:\/\/belkadan.com\/blog\/2021\/08\/Swift-Regret-Type-based-Overloading\/. Part of the Swift Regrets series."},{"key":"e_1_3_1_38_1","unstructured":"Swift Language Team. 2024. Type Checker Design and Implementation. https:\/\/github.com\/swiftlang\/swift\/blob\/main\/docs\/TypeChecker.md."},{"key":"e_1_3_1_39_1","doi-asserted-by":"publisher","DOI":"10.1145\/3708493.3712684"},{"key":"e_1_3_1_40_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\/pdf\/10.1145\/3763168","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,7,16]],"date-time":"2026-07-16T10:17:23Z","timestamp":1784197043000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3763168"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2025,10,9]]},"references-count":39,"journal-issue":{"issue":"OOPSLA2","published-print":{"date-parts":[[2025,10,9]]}},"alternative-id":["10.1145\/3763168"],"URL":"https:\/\/doi.org\/10.1145\/3763168","relation":{},"ISSN":["2475-1421"],"issn-type":[{"value":"2475-1421","type":"electronic"}],"subject":[],"published":{"date-parts":[[2025,10,9]]},"assertion":[{"value":"2025-03-25","order":0,"name":"received","label":"Received","group":{"name":"publication_history","label":"Publication History"}},{"value":"2025-08-12","order":2,"name":"accepted","label":"Accepted","group":{"name":"publication_history","label":"Publication History"}},{"value":"2025-10-09","order":3,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}