HackerPapers

arXiv:1504.07680cs.PL

Elaborating Evaluation-Order Polymorphism

Jana Dunfield

Early discovery. Linked by one identifiable commenter. This paper is outside the main ranking; a mention is not an endorsement.

Abstract

We classify programming languages according to evaluation order: each language fixes one evaluation order as the default, making it transparent to program in that evaluation order, and troublesome to program in the other. This paper develops a type system that is impartial with respect to evaluation order. Evaluation order is implicit in terms, and explicit in types, with by-value and by-name versions of type connectives. A form of intersection type quantifies over evaluation orders, describing code that is agnostic over (that is, polymorphic in) evaluation order. By allowing such generic code, programs can express the by-value and by-name versions of a computation without code duplication. We also formulate a type system that only has by-value connectives, plus a type that generalizes the difference between by-value and by-name connectives: it is either a suspension (by name) or a "no-op" (by value). We show a straightforward encoding of the impartial type system into the more economical one. Then we define an elaboration from the economical language to a call-by-value semantics, and prove that elaborating a well-typed source program, where evaluation order is implicit, produces a well-typed target program where evaluation order is explicit. We also prove a simulation between evaluation of the target program and reductions (either by-value or by-name) in the source program. Finally, we prove that typing, elaboration, and evaluation are faithful to the type annotations given in the source program: if the programmer only writes by-value types, no by-name reductions can occur at run time.

arXiv comments
13 pages + appendix; in International Conference on Functional Programming (ICFP) 2015. arXiv version 3 makes corrections to Figure 5 and Section 2.4, preserving page breaks
Journal reference
DOI
Subjects
cs.PLProgramming Languages

On Hacker News

Linked by 1 identifiable commenter in 1 comment across 1 thread, from Jun 2015 to Jun 2015.

Comments linking this paper, per year.

Discussed in comments1 thread

  1. Thinking with Lazy Evaluation 1 comment
    • There have been some theoretical unifying attempts such as Paul Levy's "Call By Push Value" and more recently this http://arxiv.org/abs/1504.07680 But I haven't found anything particularly satisfying from the practical point of view.

      tomeView on HNParent context

Submitted to Hacker News

Connected through shared HN threads, not inferred similarity or a recommendation.