{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,4,11]],"date-time":"2026-04-11T02:12:51Z","timestamp":1775873571088,"version":"3.50.1"},"reference-count":54,"publisher":"Association for Computing Machinery (ACM)","issue":"POPL","license":[{"start":{"date-parts":[[2024,1,2]],"date-time":"2024-01-02T00:00:00Z","timestamp":1704153600000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0\/"}],"funder":[{"DOI":"10.13039\/501100001665","name":"Agence Nationale de la Recherche","doi-asserted-by":"publisher","award":["22-PECY-0005"],"award-info":[{"award-number":["22-PECY-0005"]}],"id":[{"id":"10.13039\/501100001665","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":[[2024,1,2]]},"abstract":"<jats:p>We present a type system that combines, in a controlled way, first-order polymorphism with intersection types, union types, and subtyping, and prove its safety. We then define a type reconstruction algorithm that is sound and terminating. This yields a system in which unannotated functions are given polymorphic types (thanks to Hindley-Milner) that can express the overloaded behavior of the functions they type (thanks to the intersection introduction rule) and that are deduced by applying advanced techniques of type narrowing (thanks to the union elimination rule). This makes the system a prime candidate to type dynamic languages.<\/jats:p>","DOI":"10.1145\/3632882","type":"journal-article","created":{"date-parts":[[2024,1,5]],"date-time":"2024-01-05T20:48:51Z","timestamp":1704487731000},"page":"1179-1210","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":8,"title":["Polymorphic Type Inference for Dynamic Languages"],"prefix":"10.1145","volume":"8","author":[{"ORCID":"https:\/\/orcid.org\/0000-0003-0951-7535","authenticated-orcid":false,"given":"Giuseppe","family":"Castagna","sequence":"first","affiliation":[{"name":"CNRS - Universit\u00e9 Paris Cit\u00e9, Paris, France"}]},{"ORCID":"https:\/\/orcid.org\/0000-0003-1590-2392","authenticated-orcid":false,"given":"Micka\u00ebl","family":"Laurent","sequence":"additional","affiliation":[{"name":"Universit\u00e9 Paris Cit\u00e9, Paris, France"}]},{"ORCID":"https:\/\/orcid.org\/0000-0002-1729-870X","authenticated-orcid":false,"given":"Kim","family":"Nguy\u1ec5n","sequence":"additional","affiliation":[{"name":"Universit\u00e9 Paris-Saclay, Gif-sur-Yvette, France"}]}],"member":"320","published-online":{"date-parts":[[2024,1,5]]},"reference":[{"key":"e_1_3_2_2_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-031-17715-6_29"},{"key":"e_1_3_2_3_1","doi-asserted-by":"publisher","DOI":"10.1006\/inco.1995.1086"},{"key":"e_1_3_2_4_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.tcs.2008.01.046"},{"key":"e_1_3_2_5_1","volume-title":"The French School of Programming","author":"Castagna Giuseppe","year":"2023","unstructured":"Giuseppe Castagna. 2023a. Programming with union, intersection, and negation types. In The French School of Programming, Bertrand Meyer (Ed.). Springer. ISBN 978-3-031-34517-3. Preprint at arXiv:2111.03354."},{"key":"e_1_3_2_6_1","doi-asserted-by":"publisher","DOI":"10.1145\/3607838"},{"key":"e_1_3_2_7_1","doi-asserted-by":"publisher","DOI":"10.22152\/programming-journal.org\/2024\/8\/4"},{"key":"e_1_3_2_8_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.scico.2022.102781"},{"key":"e_1_3_2_9_1","doi-asserted-by":"publisher","DOI":"10.5281\/zenodo.10155221"},{"key":"e_1_3_2_10_1","doi-asserted-by":"publisher","unstructured":"Giuseppe Castagna Micka\u00ebl Laurent and Kim Nguyen. 2024. Polymorphic Type Inference for Dynamic Languages (Extended version). https:\/\/doi.org\/10.1145\/3632882 10.1145\/3632882","DOI":"10.1145\/3632882"},{"key":"e_1_3_2_11_1","doi-asserted-by":"publisher","DOI":"10.1145\/3498674"},{"key":"e_1_3_2_12_1","doi-asserted-by":"publisher","DOI":"10.1145\/2676726.2676991"},{"key":"e_1_3_2_13_1","doi-asserted-by":"publisher","DOI":"10.1145\/2951913.2951928"},{"key":"e_1_3_2_14_1","doi-asserted-by":"publisher","DOI":"10.1145\/2034773.2034788"},{"key":"e_1_3_2_15_1","unstructured":"CDuce. The CDuce Compiler. CDuce https:\/\/www.cduce.org"},{"key":"e_1_3_2_16_1","doi-asserted-by":"publisher","DOI":"10.1002\/malq.19810270205"},{"key":"e_1_3_2_17_1","doi-asserted-by":"publisher","DOI":"10.1145\/582153.582176"},{"key":"e_1_3_2_18_1","unstructured":"Mariangiola Dezani. 2020. Personal communication."},{"key":"e_1_3_2_19_1","doi-asserted-by":"publisher","DOI":"10.1145\/3009837.3009882"},{"key":"e_1_3_2_20_1","unstructured":"Ecma. 2021. ECMAScript\u00ae 2021 Language Specification. https:\/\/262.ecma-international.org\/12.0\/"},{"key":"e_1_3_2_21_1","unstructured":"Facebook. Flow. Facebook https:\/\/flow.org\/"},{"key":"e_1_3_2_22_1","doi-asserted-by":"publisher","DOI":"10.1109\/LICS.2002.1029823"},{"key":"e_1_3_2_23_1","doi-asserted-by":"publisher","DOI":"10.1145\/1391289.1391293"},{"key":"e_1_3_2_24_1","doi-asserted-by":"publisher","DOI":"10.1145\/2812805"},{"key":"e_1_3_2_25_1","doi-asserted-by":"publisher","DOI":"10.4230\/LIPIcs.SNAPL.2019.6"},{"key":"e_1_3_2_26_1","doi-asserted-by":"publisher","DOI":"10.1145\/169701.169692"},{"key":"e_1_3_2_27_1","doi-asserted-by":"publisher","DOI":"10.2307\/1995158"},{"key":"e_1_3_2_28_1","unstructured":"Alan Jeffrey. 2022. Semantic Subtyping in Luau. Roblox Technical Blog. https:\/\/blog.roblox.com\/2022\/11\/semantic-subtyping-luau Accessed on May 6th 2023."},{"key":"e_1_3_2_29_1","first-page":"323","volume-title":"ICALP Workshops 2000, Proceedings of the Satelite Workshops of the 27th International Colloquium on Automata, Languages and Programming, Geneva, Switzerland, July 9-15, 2000","author":"Jim Trevor","year":"2000","unstructured":"Trevor Jim. 2000. A Polar Type System. In ICALP Workshops 2000, Proceedings of the Satelite Workshops of the 27th International Colloquium on Automata, Languages and Programming, Geneva, Switzerland, July 9-15, 2000, Jos\u00e9 D. P. Rolim, Andrei Z. Broder, Andrea Corradini, Roberto Gorrieri, Reiko Heckel, Juraj Hromkovic, Ugo Vaccaro, and Joe B. Wells (Eds.). Carleton Scientific, Waterloo, Ontario, Canada, 323\u2013338."},{"key":"e_1_3_2_30_1","doi-asserted-by":"publisher","DOI":"10.1145\/169701.169687"},{"key":"e_1_3_2_31_1","doi-asserted-by":"publisher","DOI":"10.1145\/567067.567077"},{"key":"e_1_3_2_32_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.ic.2007.03.005"},{"key":"e_1_3_2_33_1","unstructured":"Luau. Luau. https:\/\/luau-lang.org\/"},{"key":"e_1_3_2_34_1","doi-asserted-by":"publisher","DOI":"10.1016\/S0019-9958(86)80019-5"},{"key":"e_1_3_2_35_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-94-011-0834-8_5"},{"key":"e_1_3_2_36_1","unstructured":"Microsoft. TypeScript. Microsoft https:\/\/www.typescriptlang.org\/"},{"key":"e_1_3_2_37_1","doi-asserted-by":"publisher","DOI":"10.1016\/0022-0000(78)90014-4"},{"key":"e_1_3_2_38_1","unstructured":"OCaml. 2023. Standard Library: Map module. Github repository. https:\/\/github.com\/ocaml\/ocaml\/blob\/trunk\/stdlib\/map.ml"},{"key":"e_1_3_2_39_1","unstructured":"Ocsigen. JS of OCaml. Ocsigen https:\/\/ocsigen.org\/js_of_ocaml\/"},{"key":"e_1_3_2_40_1","doi-asserted-by":"publisher","DOI":"10.1145\/3022670.2951945"},{"key":"e_1_3_2_41_1","doi-asserted-by":"publisher","DOI":"10.1145\/3563304"},{"key":"e_1_3_2_42_1","volume-title":"Polymorphic Set-Theoretic Types for Functional Languages","author":"Petrucciani Tommaso","year":"2019","unstructured":"Tommaso Petrucciani. 2019. Polymorphic Set-Theoretic Types for Functional Languages. Ph. D. Dissertation. Joint Ph.D. Thesis, Universit\u00e0 di Genova and Universit\u00e9 Paris Diderot. https:\/\/tel.archives-ouvertes.fr\/tel-02119930"},{"key":"e_1_3_2_43_1","doi-asserted-by":"publisher","DOI":"10.4230\/LIPIcs.TYPES.2018.4"},{"key":"e_1_3_2_44_1","doi-asserted-by":"publisher","DOI":"10.1145\/3571211"},{"key":"e_1_3_2_45_1","doi-asserted-by":"publisher","DOI":"10.1145\/321250.321253"},{"key":"e_1_3_2_46_1","doi-asserted-by":"publisher","DOI":"10.1016\/S1571-0661(04)80496-1"},{"key":"e_1_3_2_47_1","doi-asserted-by":"publisher","DOI":"10.1145\/141471.141563"},{"key":"e_1_3_2_48_1","doi-asserted-by":"publisher","DOI":"10.1145\/3587216.3587220"},{"key":"e_1_3_2_49_1","unstructured":"Christopher Strachey. 1967. Fundamental concepts in programming languages. Lecture notes for International Summer School in Computer Programming Copenhagen."},{"key":"e_1_3_2_50_1","doi-asserted-by":"publisher","DOI":"10.1145\/1328438.1328486"},{"key":"e_1_3_2_51_1","doi-asserted-by":"publisher","DOI":"10.1145\/1863543.1863561"},{"key":"e_1_3_2_52_1","unstructured":"Types 2019. What exactly should we call syntax-directed inference rules? Discussion on the Types mailing list. http:\/\/lists.seas.upenn.edu\/pipermail\/types-list\/2019\/002138.html."},{"key":"e_1_3_2_53_1","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796801004245"},{"key":"e_1_3_2_54_1","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-45927-8_9"},{"key":"e_1_3_2_55_1","doi-asserted-by":"publisher","DOI":"10.1145\/3460228"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3632882","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3632882","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,7,4]],"date-time":"2025-07-04T20:06:31Z","timestamp":1751659591000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3632882"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2024,1,2]]},"references-count":54,"journal-issue":{"issue":"POPL","published-print":{"date-parts":[[2024,1,2]]}},"alternative-id":["10.1145\/3632882"],"URL":"https:\/\/doi.org\/10.1145\/3632882","relation":{},"ISSN":["2475-1421"],"issn-type":[{"value":"2475-1421","type":"electronic"}],"subject":[],"published":{"date-parts":[[2024,1,2]]},"assertion":[{"value":"2024-01-05","order":3,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}