{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,7,16]],"date-time":"2026-07-16T20:08:57Z","timestamp":1784232537274,"version":"3.55.0"},"reference-count":39,"publisher":"Association for Computing Machinery (ACM)","issue":"POPL","license":[{"start":{"date-parts":[[2025,1,7]],"date-time":"2025-01-07T00:00:00Z","timestamp":1736208000000},"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":["2107206"],"award-info":[{"award-number":["2107206"]}],"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":[[2025,1,7]]},"abstract":"<jats:p>Structure editors operate directly on a program\u2019s syntactic tree structure. At first glance, this allows for the exciting possibility that such an editor could enforce correctness properties: programs could be well-formed and sometimes even well-typed by construction. Unfortunately, traditional approaches to structure editing that attempt to rigidly enforce these properties face a seemingly fundamental problem, known in the literature as viscosity. Making changes to existing programs often requires temporarily breaking program structure\u2014but disallowing such changes makes it difficult to edit programs!<\/jats:p>\n                  <jats:p>\n                    In this paper, we present a scheme for structure editing which always maintains a valid program structure without sacrificing the fluidity necessary to freely edit programs. Two key pieces help solve this puzzle: first, we develop a novel generalization of\n                    <jats:italic toggle=\"yes\">selection<\/jats:italic>\n                    for tree-based structures that properly generalizes text-based selection and editing, allowing users to freely rearrange pieces of code by cutting and pasting one-hole contexts; second, we type these one-hole contexts with a category of\n                    <jats:italic toggle=\"yes\">type diffs<\/jats:italic>\n                    and explore the metatheory of the system that arises for maintaining well-typedness systematically. We implement our approach as an editor called\n                    <jats:ext-link xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\" ext-link-type=\"uri\" xlink:href=\"https:\/\/pantographeditor.github.io\/Pantograph\">Pantograph<\/jats:ext-link>\n                    , and we conduct a study in which we successfully taught students to program with Pantograph and compare their performance against a traditional text editor.\n                  <\/jats:p>","DOI":"10.1145\/3704864","type":"journal-article","created":{"date-parts":[[2025,1,9]],"date-time":"2025-01-09T05:48:42Z","timestamp":1736401722000},"page":"802-831","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":1,"title":["Pantograph: A Fluid and Typed Structure Editor"],"prefix":"10.1145","volume":"9","author":[{"ORCID":"https:\/\/orcid.org\/0000-0002-2702-9319","authenticated-orcid":false,"given":"Jacob","family":"Prinz","sequence":"first","affiliation":[{"name":"University of Maryland at College Park, College Park, USA"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"ORCID":"https:\/\/orcid.org\/0000-0002-9415-0944","authenticated-orcid":false,"given":"Henry","family":"Blanchette","sequence":"additional","affiliation":[{"name":"University of Maryland at College Park, College Park, USA"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"ORCID":"https:\/\/orcid.org\/0000-0003-0269-9815","authenticated-orcid":false,"given":"Leonidas","family":"Lampropoulos","sequence":"additional","affiliation":[{"name":"University of Maryland at College Park, College Park, USA"}],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"320","published-online":{"date-parts":[[2025,1,9]]},"reference":[{"key":"e_1_3_2_2_1","unstructured":"Thomas Allgren. 1996. Alfa. https:\/\/cth.altocumulus.org\/ hallgren\/Alfa\/index.html."},{"key":"e_1_3_2_3_1","doi-asserted-by":"publisher","DOI":"10.1145\/2950290.2950315"},{"key":"e_1_3_2_4_1","volume-title":"LabVIEW: Advanced programming techniques","author":"Bitter Rick","year":"2006","unstructured":"Rick Bitter, Taqi Mohiuddin, and Matt Nawrocki. 2006. LabVIEW: Advanced programming techniques. Crc Press."},{"key":"e_1_3_2_5_1","doi-asserted-by":"publisher","DOI":"10.1016\/B978-155860808-5\/50005-8"},{"key":"e_1_3_2_6_1","doi-asserted-by":"publisher","unstructured":"Henry Blanchette and Jacob Prinz. 2024. Pantograph Implementation. https:\/\/doi.org\/10.5281\/zenodo.14199877 10.5281\/zenodo.14199877.","DOI":"10.5281\/zenodo.14199877"},{"key":"e_1_3_2_7_1","doi-asserted-by":"publisher","DOI":"10.1191\/1478088706qp063oa"},{"key":"e_1_3_2_8_1","doi-asserted-by":"publisher","DOI":"10.1080\/2159676X.2019.1628806"},{"key":"e_1_3_2_9_1","article-title":"Polymorphism with Typed Holes","author":"Chen Adam","year":"2024","unstructured":"Adam Chen, Thomas Porter, and Cyrus Omar. 2024. Polymorphism with Typed Holes. TFP 2024.","journal-title":"TFP 2024"},{"key":"e_1_3_2_10_1","doi-asserted-by":"publisher","DOI":"10.1016\/1385-7258(72)90034-0"},{"key":"e_1_3_2_11_1","doi-asserted-by":"publisher","DOI":"10.1145\/2207676.2208589"},{"key":"e_1_3_2_12_1","doi-asserted-by":"publisher","DOI":"10.1145\/3450952"},{"key":"e_1_3_2_13_1","unstructured":"Future of Programming Lab. 2017. Hazel a live functional programming environment featuring typed holes. https:\/\/hazel.org"},{"key":"e_1_3_2_14_1","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796897002864"},{"key":"e_1_3_2_15_1","doi-asserted-by":"publisher","DOI":"10.1145\/1056808.1056965"},{"key":"e_1_3_2_16_1","doi-asserted-by":"publisher","DOI":"10.1109\/tse.2011.104"},{"key":"e_1_3_2_17_1","doi-asserted-by":"publisher","DOI":"10.1109\/MS.2021.3072577"},{"key":"e_1_3_2_18_1","unstructured":"Eyal Lotem and Yair Chuchem. 2015. Project Lamdu. https:\/\/www.lamdu.org\/."},{"key":"e_1_3_2_19_1","doi-asserted-by":"publisher","DOI":"10.1145\/1868358.1868363"},{"key":"e_1_3_2_20_1","unstructured":"Conor McBride. 2001. The Derivative of a Regular Type is its Type of One-Hole Contexts. https:\/\/api.semanticscholar.org\/CorpusID:15235160"},{"key":"e_1_3_2_21_1","unstructured":"Conor McBride. 2010. Ornamental algebras algebraic ornaments. (01 2010). https:\/\/personal.cis.strath.ac.uk\/conor.mcbride\/pub\/OAAO\/LitOrn.pdf"},{"key":"e_1_3_2_22_1","doi-asserted-by":"publisher","DOI":"10.1145\/367177.367199"},{"key":"e_1_3_2_23_1","unstructured":"Microsoft. 2015. Visual Studio Code. https:\/\/github.com\/microsoft\/vscode"},{"key":"e_1_3_2_24_1","unstructured":"Microsoft. 2024. monaco-editor: the fully featured code editor from VS Code. https:\/\/www.npmjs.com\/package\/monaco-editor NPM package version 0.47.0."},{"key":"e_1_3_2_25_1","doi-asserted-by":"publisher","DOI":"10.1145\/3546196.3550164"},{"key":"e_1_3_2_26_1","doi-asserted-by":"publisher","DOI":"10.1109\/vl-hcc57772.2023.00016"},{"key":"e_1_3_2_27_1","doi-asserted-by":"publisher","DOI":"10.1145\/3290327"},{"key":"e_1_3_2_28_1","doi-asserted-by":"publisher","DOI":"10.1145\/3009837.3009900"},{"key":"e_1_3_2_29_1","unstructured":"Paredit Team. 2022. Paredit website. https:\/\/paredit.org\/"},{"key":"e_1_3_2_30_1","unstructured":"Lena Pareto. 1995. The Implementation of ALF - a Proof Editor based on Martin-L\u00f6f\u2019s Monomorphic Type Theory with Explicit Substitution. (03 1995)."},{"key":"e_1_3_2_31_1","doi-asserted-by":"publisher","unstructured":"Jacob Prinz Henry Blanchette and Leonidas Lampropoulos. 2024. Pantograph: A Fluid and Typed Structure Editor. (2024). https:\/\/doi.org\/10.48550\/arXiv.2411.16571 10.48550\/arXiv.2411.16571 arXiv:arXiv:2411.16571","DOI":"10.48550\/arXiv.2411.16571"},{"key":"e_1_3_2_32_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-32037-8_1"},{"key":"e_1_3_2_33_1","article-title":"Gradual typing for functional languages","author":"Siek Jeremy","year":"2006","unstructured":"Jeremy Siek and Walid Taha. 2006. Gradual typing for functional languages. Scheme and Functional Programming.","journal-title":"Scheme and Functional Programming"},{"key":"e_1_3_2_34_1","doi-asserted-by":"publisher","unstructured":"Jeremy G. Siek Michael M. Vitousek Matteo Cimini and John Tang Boyland. 2015. Refined Criteria for Gradual Typing. Schloss Dagstuhl \u2013 Leibniz-Zentrum f\u00fcr Informatik. https:\/\/doi.org\/10.4230\/LIPICS.SNAPL.2015.274 10.4230\/LIPICS.SNAPL.2015.274.","DOI":"10.4230\/LIPICS.SNAPL.2015.274"},{"key":"e_1_3_2_35_1","doi-asserted-by":"publisher","DOI":"10.1145\/366378.366379"},{"key":"e_1_3_2_36_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-35992-7_11"},{"key":"e_1_3_2_37_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-319-11245-9_3"},{"key":"e_1_3_2_38_1","doi-asserted-by":"publisher","DOI":"10.1145\/512644.512648"},{"key":"e_1_3_2_39_1","doi-asserted-by":"publisher","DOI":"10.1145\/3158109"},{"key":"e_1_3_2_40_1","doi-asserted-by":"publisher","DOI":"10.1145\/3632910"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3704864","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3704864","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,2,4]],"date-time":"2026-02-04T10:16:57Z","timestamp":1770200217000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3704864"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2025,1,7]]},"references-count":39,"journal-issue":{"issue":"POPL","published-print":{"date-parts":[[2025,1,7]]}},"alternative-id":["10.1145\/3704864"],"URL":"https:\/\/doi.org\/10.1145\/3704864","relation":{},"ISSN":["2475-1421"],"issn-type":[{"value":"2475-1421","type":"electronic"}],"subject":[],"published":{"date-parts":[[2025,1,7]]},"assertion":[{"value":"2024-07-09","order":0,"name":"received","label":"Received","group":{"name":"publication_history","label":"Publication History"}},{"value":"2024-11-07","order":2,"name":"accepted","label":"Accepted","group":{"name":"publication_history","label":"Publication History"}},{"value":"2025-01-09","order":3,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}