{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,8,7]],"date-time":"2025-08-07T20:27:52Z","timestamp":1754598472920,"version":"3.41.0"},"reference-count":61,"publisher":"Association for Computing Machinery (ACM)","issue":"ICFP","license":[{"start":{"date-parts":[[2023,8,30]],"date-time":"2023-08-30T00:00:00Z","timestamp":1693353600000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0\/"}],"funder":[{"DOI":"10.13039\/100000001","name":"NSF","doi-asserted-by":"publisher","award":["SHF 1763922,2030859,2237984"],"award-info":[{"award-number":["SHF 1763922,2030859,2237984"]}],"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":[[2023,8,30]]},"abstract":"<jats:p>Equipping an existing programming language with a gradual type system  \nrequires two major steps. The first and most visible one in academia  \nis to add a notation for types and a type checking apparatus. The second, highly  \npractical one is to provide a type veneer for the large number of  \nexisting untyped libraries; doing so enables typed components  \nto import pieces of functionality and get their  \nuses type-checked, without any changes to the libraries. When programmers create such typed veneers for  \nlibraries, they make mistakes that persist and cause  \ntrouble. The question is whether the academically investigated  \nrun-time checks for gradual type systems assist programmers with  \ndebugging such mistakes. This paper provides a first, surprising  \nanswer to this question via a rational-programmer investigation:  \nrun-time checks alone are typically less helpful than the safety checks of the underlying language.  \nCombining Natural run-time checks with blame, however, provides  \nsignificantly superior debugging hints.<\/jats:p>","DOI":"10.1145\/3607836","type":"journal-article","created":{"date-parts":[[2023,8,31]],"date-time":"2023-08-31T17:40:31Z","timestamp":1693503631000},"page":"159-186","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":4,"title":["How to Evaluate Blame for Gradual Types, Part 2"],"prefix":"10.1145","volume":"7","author":[{"ORCID":"https:\/\/orcid.org\/0009-0000-6484-5270","authenticated-orcid":false,"given":"Lukas","family":"Lazarek","sequence":"first","affiliation":[{"name":"Northwestern University, USA"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"ORCID":"https:\/\/orcid.org\/0000-0001-7078-9287","authenticated-orcid":false,"given":"Ben","family":"Greenman","sequence":"additional","affiliation":[{"name":"Brown University, USA"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"ORCID":"https:\/\/orcid.org\/0000-0001-6678-1004","authenticated-orcid":false,"given":"Matthias","family":"Felleisen","sequence":"additional","affiliation":[{"name":"Northeastern University, USA"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"ORCID":"https:\/\/orcid.org\/0000-0002-9338-7034","authenticated-orcid":false,"given":"Christos","family":"Dimoulas","sequence":"additional","affiliation":[{"name":"Northwestern University, USA"}],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"320","published-online":{"date-parts":[[2023,8,31]]},"reference":[{"key":"e_1_2_1_1_1","doi-asserted-by":"publisher","DOI":"10.1080\/08993408.2016.1225464"},{"key":"e_1_2_1_2_1","doi-asserted-by":"publisher","unstructured":"Neil C. C. Brown Amjad AlTadmri Sue Sentance and Michael K\u00f6lling. 2018. Blackbox Five Years On: An Evaluation of a Large-scale Programming Data Collection Project. In ICER. 196\u2013204. https:\/\/doi.org\/10.1145\/3230977.3230991 10.1145\/3230977.3230991","DOI":"10.1145\/3230977.3230991"},{"key":"e_1_2_1_3_1","doi-asserted-by":"publisher","DOI":"10.1145\/3428259"},{"key":"e_1_2_1_4_1","doi-asserted-by":"publisher","DOI":"10.1145\/3158103"},{"key":"e_1_2_1_5_1","doi-asserted-by":"publisher","unstructured":"Sheng Chen and Martin Erwig. 2014. Counter-Factual Typing for Debugging Type Errors. In POPL. 583\u2013594. https:\/\/doi.org\/10.1145\/2535838.2535863 10.1145\/2535838.2535863","DOI":"10.1145\/2535838.2535863"},{"key":"e_1_2_1_6_1","doi-asserted-by":"publisher","DOI":"10.1145\/3428200"},{"key":"e_1_2_1_7_1","doi-asserted-by":"publisher","DOI":"10.1145\/3452379"},{"key":"e_1_2_1_8_1","doi-asserted-by":"publisher","DOI":"10.1145\/3475738.3480941"},{"key":"e_1_2_1_9_1","doi-asserted-by":"publisher","DOI":"10.1109\/C-M.1978.218136"},{"key":"e_1_2_1_10_1","doi-asserted-by":"publisher","DOI":"10.1145\/3411764.3445696"},{"key":"e_1_2_1_11_1","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-13394-1_11"},{"key":"e_1_2_1_12_1","doi-asserted-by":"publisher","unstructured":"Asger Feldthaus and Anders M\u00f8ller. 2014. Checking Correctness of TypeScript Interfaces for JavaScript Libraries. In OOPSLA. 1\u201316. https:\/\/doi.org\/10.1145\/2660193.2660215 10.1145\/2660193.2660215","DOI":"10.1145\/2660193.2660215"},{"key":"e_1_2_1_13_1","doi-asserted-by":"publisher","unstructured":"Robert Bruce Findler and Matthias Felleisen. 2002. Contracts for Higher-Order Functions. In ICFP. 48\u201359. https:\/\/doi.org\/10.1145\/581478.581484 10.1145\/581478.581484","DOI":"10.1145\/581478.581484"},{"key":"e_1_2_1_14_1","doi-asserted-by":"publisher","unstructured":"Matthew Flatt Shriram Krishnamurthi and Matthias Felleisen. 1998. Classes and Mixins. In POPL. 171\u2013183. https:\/\/doi.org\/10.1145\/268946.268961 10.1145\/268946.268961","DOI":"10.1145\/268946.268961"},{"key":"e_1_2_1_15_1","doi-asserted-by":"publisher","unstructured":"Ronald Garcia and Matteo Cimini. 2015. Principal Type Schemes for Gradual Programs. In POPL. 303\u2013315. https:\/\/doi.org\/10.1145\/2676726.2676992 10.1145\/2676726.2676992","DOI":"10.1145\/2676726.2676992"},{"volume-title":"Deep and Shallow Types. Ph. D. Dissertation","author":"Greenman Ben","key":"e_1_2_1_16_1","unstructured":"Ben Greenman. 2020. Deep and Shallow Types. Ph. D. Dissertation. Northeastern University."},{"key":"e_1_2_1_17_1","doi-asserted-by":"publisher","DOI":"10.1145\/3360548"},{"key":"e_1_2_1_18_1","doi-asserted-by":"publisher","unstructured":"Ben Greenman Lukas Lazarek Christos Dimoulas and Matthias Felleisen. 2022. A Transient Semantics for Typed Racket. Programming 2 6 https:\/\/doi.org\/10.22152\/programming-journal.org\/2022\/6\/9 10.22152\/programming-journal.org\/2022\/6\/9","DOI":"10.22152\/programming-journal.org"},{"key":"e_1_2_1_19_1","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796818000217"},{"key":"e_1_2_1_20_1","doi-asserted-by":"publisher","unstructured":"Stefan Hanenberg. 2010. An Experiment about Static and Dynamic Type Systems: Doubts about the Positive Impact of Static Type Systems on Development Time. In OOPSLA. 22\u201335. https:\/\/doi.org\/10.1145\/1869459.1869462 10.1145\/1869459.1869462","DOI":"10.1145\/1869459.1869462"},{"key":"e_1_2_1_21_1","doi-asserted-by":"publisher","DOI":"10.1007\/s10664-013-9289-1"},{"key":"e_1_2_1_22_1","doi-asserted-by":"publisher","DOI":"10.1257\/aer.91.2.73"},{"key":"e_1_2_1_23_1","doi-asserted-by":"publisher","DOI":"10.1145\/3563305"},{"key":"e_1_2_1_24_1","doi-asserted-by":"publisher","DOI":"10.1145\/503502.503505"},{"key":"e_1_2_1_25_1","doi-asserted-by":"publisher","unstructured":"Ralph Keller and Urs H\u00f6lzle. 1998. Binary component adaptation. In ECOOP. 307\u2013329. https:\/\/doi.org\/10.1007\/BFb0054097 10.1007\/BFb0054097","DOI":"10.1007\/BFb0054097"},{"key":"e_1_2_1_26_1","doi-asserted-by":"publisher","unstructured":"Erik Krogh Kristensen and Anders M\u00f8ller. 2017. Inference and Evolution of TypeScript Declaration Files. In FASE. 99\u2013115. https:\/\/doi.org\/10.1007\/978-3-662-54494-5_6 10.1007\/978-3-662-54494-5_6","DOI":"10.1007\/978-3-662-54494-5_6"},{"key":"e_1_2_1_27_1","doi-asserted-by":"publisher","DOI":"10.1145\/3133914"},{"key":"e_1_2_1_28_1","doi-asserted-by":"publisher","DOI":"10.1145\/3473573"},{"key":"e_1_2_1_29_1","doi-asserted-by":"publisher","DOI":"10.1145\/3373113"},{"volume-title":"Fault Diagnosis of Computer Programs","author":"Lipton Richard J","key":"e_1_2_1_30_1","unstructured":"Richard J Lipton. 1971. Fault Diagnosis of Computer Programs. Carnegie Mellon University, Pittsburgh, PA."},{"key":"e_1_2_1_31_1","doi-asserted-by":"publisher","DOI":"10.1145\/3485532"},{"volume-title":"d.]. TypeScript. Retrieved","year":"2023","key":"e_1_2_1_33_1","unstructured":"Microsoft. [n. d.]. TypeScript. Retrieved February 23, 2023 from https:\/\/www.typescriptlang.org"},{"key":"e_1_2_1_34_1","doi-asserted-by":"publisher","DOI":"10.1145\/3371097"},{"key":"e_1_2_1_35_1","unstructured":"John Stuart Mill. 1874. Essays on Some Unsettled Questions of Political Economy. Longmans Green Reader and Dyer."},{"volume-title":"Revised Edition","author":"Milner Robin","key":"e_1_2_1_36_1","unstructured":"Robin Milner, Robert Harper, David MacQueen, and Mads Tofte. 1998. The Definition of Standard ML, Revised Edition. MIT Press."},{"volume-title":"The Definition of Standard ML","author":"Milner Robin","key":"e_1_2_1_37_1","unstructured":"Robin Milner, Mads Tofte, and Robert Harper. 1990. The Definition of Standard ML. MIT Press."},{"key":"e_1_2_1_38_1","doi-asserted-by":"publisher","DOI":"10.1145\/3290331"},{"key":"e_1_2_1_39_1","doi-asserted-by":"publisher","DOI":"10.1145\/1508244.1508275"},{"key":"e_1_2_1_40_1","doi-asserted-by":"publisher","unstructured":"Zvonimir Pavlinovic Tim King and Thomas Wies. 2014. Finding Minimum Type Error Sources. In OOPSLA. 525\u2013542. https:\/\/doi.org\/10.1145\/2660193.2660230 10.1145\/2660193.2660230","DOI":"10.1145\/2660193.2660230"},{"key":"e_1_2_1_41_1","doi-asserted-by":"publisher","DOI":"10.1145\/3485488"},{"key":"e_1_2_1_42_1","doi-asserted-by":"publisher","unstructured":"Aseem Rastogi Avik Chaudhuri and Basil Hosmer. 2012. The Ins and Outs of Gradual Type Inference. In POPL. 481\u2013494. https:\/\/doi.org\/10.1145\/2103656.2103714 10.1145\/2103656.2103714","DOI":"10.1145\/2103656.2103714"},{"key":"e_1_2_1_43_1","doi-asserted-by":"publisher","unstructured":"Eric L. Seidel Ranjit Jhala and Westley Weimer. 2016. Dynamic Witnesses for Static Type Errors (or Ill-Typed Programs Usually Go Wrong). In ICFP. 228\u2013242. https:\/\/doi.org\/10.1145\/2951913.2951915 10.1145\/2951913.2951915","DOI":"10.1145\/2951913.2951915"},{"key":"e_1_2_1_44_1","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796818000126"},{"key":"e_1_2_1_45_1","unstructured":"Herbert A. Simon. 1947. Administrative Behavior. MacMillan."},{"key":"e_1_2_1_46_1","doi-asserted-by":"publisher","unstructured":"Samuel Spiza and Stefan Hanenberg. 2014. Type Names without Static Type Checking Already Improve the Usability of APIs (as Long as the Type Names Are Correct): An Empirical Study. In Modularity. 99\u2013108. https:\/\/doi.org\/10.1145\/2577080.2577098 10.1145\/2577080.2577098","DOI":"10.1145\/2577080.2577098"},{"key":"e_1_2_1_47_1","doi-asserted-by":"publisher","DOI":"10.1145\/2500365.2500616"},{"key":"e_1_2_1_48_1","doi-asserted-by":"publisher","DOI":"10.1145\/2384616.2384685"},{"key":"e_1_2_1_49_1","doi-asserted-by":"publisher","unstructured":"Asumu Takikawa Daniel Feltey Ben Greenman Max S. New Jan Vitek and Matthias Felleisen. 2016. Is Sound Gradual Typing Dead? In POPL. 456\u2013468. https:\/\/doi.org\/10.1145\/2837614.2837630 10.1145\/2837614.2837630","DOI":"10.1145\/2837614.2837630"},{"key":"e_1_2_1_50_1","doi-asserted-by":"publisher","unstructured":"Sam Tobin-Hochstadt and Matthias Felleisen. 2006. Interlanguage Migration: from Scripts to Programs. In DLS. 964\u2013974. https:\/\/doi.org\/10.1145\/1176617.1176755 10.1145\/1176617.1176755","DOI":"10.1145\/1176617.1176755"},{"key":"e_1_2_1_51_1","doi-asserted-by":"publisher","unstructured":"Sam Tobin-Hochstadt and Matthias Felleisen. 2008. The Design and Implementation of Typed Scheme. In POPL. 395\u2013406. https:\/\/doi.org\/10.1145\/1328438.1328486 10.1145\/1328438.1328486","DOI":"10.1145\/1328438.1328486"},{"key":"e_1_2_1_52_1","doi-asserted-by":"publisher","unstructured":"Sam Tobin-Hochstadt and Matthias Felleisen. 2010. Logical Types for Untyped Languages. In ICFP. 117\u2013128. https:\/\/doi.org\/10.1145\/1863543.1863561 10.1145\/1863543.1863561","DOI":"10.1145\/1863543.1863561"},{"key":"e_1_2_1_53_1","doi-asserted-by":"publisher","DOI":"10.4230\/LIPIcs.SNAPL.2017.17"},{"key":"e_1_2_1_54_1","doi-asserted-by":"publisher","unstructured":"Preston Tunnell Wilson Ben Greenman Justin Pombrio and Shriram Krishnamurthi. 2018. The Behavior of Gradual Types: a User Study. In DLS. 1\u201312. https:\/\/doi.org\/10.1145\/3276945.3276947 10.1145\/3276945.3276947","DOI":"10.1145\/3276945.3276947"},{"key":"e_1_2_1_55_1","doi-asserted-by":"publisher","unstructured":"Michael M. Vitousek Andrew Kent Jeremy G. Siek and Jim Baker. 2014. Design and Evaluation of Gradual Typing for Python. In DLS. 45\u201356. https:\/\/doi.org\/10.1145\/2661088.2661101 10.1145\/2661088.2661101","DOI":"10.1145\/2661088.2661101"},{"key":"e_1_2_1_56_1","doi-asserted-by":"publisher","unstructured":"Michael M. Vitousek Jeremy G. Siek and Avik Chaudhuri. 2019. Optimizing and Evaluating Transient Gradual Typing. In DLS. 28\u201341. https:\/\/doi.org\/10.1145\/3359619.3359742 10.1145\/3359619.3359742","DOI":"10.1145\/3359619.3359742"},{"key":"e_1_2_1_57_1","doi-asserted-by":"publisher","DOI":"10.1145\/3009837.3009849"},{"key":"e_1_2_1_58_1","doi-asserted-by":"publisher","unstructured":"Philip Wadler and Robert Bruce Findler. 2009. Well-typed Programs Can\u2019t Be Blamed. In ESOP. 1\u201315. https:\/\/doi.org\/10.1007\/978-3-642-00590-9_1 10.1007\/978-3-642-00590-9_1","DOI":"10.1007\/978-3-642-00590-9_1"},{"key":"e_1_2_1_59_1","doi-asserted-by":"publisher","unstructured":"Richard L. Wexelblat. 1976. Maxims for Malfeasant Designers or How to Design Languages to Make Programming as Difficult as Possible. In ICSE. 331\u2013336. https:\/\/doi.org\/10.5555\/800253.807695","DOI":"10.5555\/800253.807695"},{"key":"e_1_2_1_60_1","doi-asserted-by":"publisher","DOI":"10.4230\/LIPIcs.ECOOP.2017.28"},{"key":"e_1_2_1_61_1","doi-asserted-by":"publisher","DOI":"10.1145\/3133929"},{"key":"e_1_2_1_62_1","doi-asserted-by":"publisher","DOI":"10.1145\/2535838.2535870"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3607836","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3607836","content-type":"application\/pdf","content-version":"vor","intended-application":"syndication"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3607836","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,17]],"date-time":"2025-06-17T16:37:05Z","timestamp":1750178225000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3607836"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2023,8,30]]},"references-count":61,"journal-issue":{"issue":"ICFP","published-print":{"date-parts":[[2023,8,30]]}},"alternative-id":["10.1145\/3607836"],"URL":"https:\/\/doi.org\/10.1145\/3607836","relation":{},"ISSN":["2475-1421"],"issn-type":[{"type":"electronic","value":"2475-1421"}],"subject":[],"published":{"date-parts":[[2023,8,30]]},"assertion":[{"value":"2023-08-31","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}