Affiliation:
1. Carnegie Mellon University, USA
2. Oregon State University, USA
3. University of Colorado at Boulder, USA
Abstract
Structure editors
allow programmers to edit the tree structure of a program directly. This can have cognitive benefits, particularly for novice and end-user programmers. It also simplifies matters for tool designers, because they do not need to contend with malformed program text.
This paper introduces Hazelnut, a structure editor based on a small bidirectionally typed lambda calculus extended with
holes
and a
cursor
. Hazelnut goes one step beyond syntactic well-formedness: its edit actions operate over statically meaningful incomplete terms. Naïvely, this would force the programmer to construct terms in a rigid "outside-in" manner. To avoid this problem, the action semantics automatically places terms assigned a type that is inconsistent with the expected type
inside
a hole. This meaningfully defers the type consistency check until the term inside the hole is
finished
.
Hazelnut is not intended as an end-user tool itself. Instead, it serves as a foundational account of typed structure editing. To that end, we describe how Hazelnut's rich metatheory, which we have mechanized using the Agda proof assistant, serves as a guide when we extend the calculus to include binary sum types. We also discuss various interpretations of holes, and in so doing reveal connections with gradual typing and contextual modal type theory, the Curry-Howard interpretation of contextual modal logic. Finally, we discuss how Hazelnut's semantics lends itself to implementation as an event-based functional reactive program. Our simple reference implementation is written using js_of_ocaml.
Funder
Defense Advanced Research Projects Agency
National Security Agency
National Science Foundation
Publisher
Association for Computing Machinery (ACM)
Subject
Computer Graphics and Computer-Aided Design,Software
Cited by
15 articles.
订阅此论文施引文献
订阅此论文施引文献,注册后可以免费订阅5篇论文的施引文献,订阅后可以查看论文全部施引文献
1. A Study of Editor Features in a Creative Coding Classroom;Proceedings of the 2023 CHI Conference on Human Factors in Computing Systems;2023-04-19
2. Live Pattern Matching with Typed Holes;Proceedings of the ACM on Programming Languages;2023-04-06
3. A Structure Editor with Type-Safe Copy/Paste;Proceedings of the 34th Symposium on Implementation and Application of Functional Languages;2022-08-31
4. Language-parametric static semantic code completion;Proceedings of the ACM on Programming Languages;2022-04-29
5. An Editor Calculus With Undo/Redo;2021 23rd International Symposium on Symbolic and Numeric Algorithms for Scientific Computing (SYNASC);2021-12