916 papers · page 33 of 46
Vladimir Gapeyev, Michael Y. Levin, Benjamin C. Pierce
Algorithms for checking subtyping between recursive types lie at the core of many programming language implementations. But the fundamental theory of these algorithms and how they relate to simpler declarative specifications is not widely understood, due in part to the difficulty…
Ralf Hinze
Binary search trees are old hat, aren't they? Search trees are routinely covered in introductory computer science classes and they are widely used in functional programming courses to illustrate the benefits of algebraic data types and pattern matching. And indeed, the operation …
Graham Hutton
We systematically develop a functional program that solves the countdown problem , a numbers game in which the aim is to construct arithmetic expressions satisfying certain constraints. Starting from a formal specification of the problem, we present a simple but inefficient progr…
Simon L. Peyton Jones, Simon Marlow
Higher-order languages such as Haskell encourage the programmer to build abstractions by composing functions. A good compiler must inline many of these calls to recover an efficiently executable program. In principle, inlining is dead simple: just replace the call of a function b…
Simon Marlow
Server applications, and in particular network-based server applications, place a unique combination of demands on a programming language: lightweight concurrency, high I/O throughput, and fault tolerance are all important. This paper describes a prototype web server written in C…
Conor McBride
Dependent types reflect the fact that validity of data is often a relative notion by allowing prior data to affect the types of subsequent data. Not only does this make for a precise type system, but also a highly generic one: both the type and the program for each instance of a …
J. Gregory Morrisett, Karl Crary, Neal Glew, David Walker
This paper presents STAL, a variant of Typed Assembly Language with constructs and types to support a limited form of stack allocation. As with other statically-typed low-level languages, the type system of STAL ensures that a wide class of errors cannot occur at run time, and th…
Peter Selinger
This paper serves as a self-contained, tutorial introduction to combinatory models of the untyped lambda calculus. We focus particularly on the interpretation of free variables. We argue that free variables should not be interpreted as elements in a model, as is usually done, but…
Peter Thiemann
We define a family of embedded domain specific languages for generating HTML and XML documents. Each language is implemented as a combinator library in Haskell. The generated HTML/XML documents are guaranteed to be well-formed. In addition, each library can guarantee that the gen…
Philip W. Trinder, Hans-Wolfgang Loidl, Robert F. Pointon
Parallel and distributed languages specify computations on multiple processors and have a computation language to describe the algorithm, i.e. what to compute, and a coordination language to describe how to organise the computations across the processors. Haskell has been used as…
J. B. Wells, Allyn Dimock, Robert Muller, Franklyn A. Turbak
We present λ CIL , a typed λ-calculus which serves as the foundation for a typed intermediate language for optimizing compilers for higher-order polymorphic programming languages. The key innovation of λ CIL is a novel formulation of intersection and union types and flow labels o…
Andrew J. Bennett, Paul H. J. Kelly, Ross A. Paterson
This paper is an exploration of the parallel graph reduction approach to parallel functional programming, illustrated by a particular example: pipelined, dynamically-scheduled implementation of search, updates and read-modify-write transactions on an in-store binary search tree. …
Nick Benton, Andrew Kennedy
From the points of view of programming pragmatics, rewriting and operational semantics, the syntactic construct used for exception handling in ML-like programming languages, and in much theoretical work on exceptions, has subtly undesirable features. We propose and discuss a more…
Ralph Benzinger
This paper describes the Automated Complexity Analysis Prototype (ACA p ) system for automated complexity analysis of functional programs synthesized with the Nuprl proof development system. We define a simple abstract cost model for N UPRL 's term language based on the current c…
Richard S. Bird
A fair amount has been written on the subject of reasoning about pointer algorithms. There was a peak about 1980 when everyone seemed to be tackling the formal verification of the Schorr–Waite marking algorithm, including Gries (1979, Morris (1982) and Topor (1979). Bornat (2000)…
Richard S. Bird
Here are two puzzles for you to solve. First, consider the binary tree in figure 1. Take a pencil (I am assuming that this is your personal copy of JFP!) and mark some of the nodes in such a way that the sum of the values of marked nodes is as large as possible. The catch is that…
Guy E. Blelloch, Hal Burch, Karl Crary, Robert Harper, Gary L. Miller, Noel Walkington
Triangulations of a surface are of fundamental importance in computational geometry, computer graphics, and engineering and scientific simulations. Triangulations are ordinarily represented as mutable graph structures for which both adding and traversing edges take constant time …
Guillaume Bonfante, Adam Cichon, Jean-Yves Marion, Hélène Touzet
We study the effect of polynomial interpretation termination proofs of deterministic (resp. non-deterministic) algorithms defined by con uent (resp. non-con uent) rewrite systems over data structures which include strings, lists and trees, and we classify them according to the in…
Margaret M. Burnett, John Atwood, Rebecca Walpole Djang, James Reichwein, Herkimer J. Gottfried, Sherry Yang
Although detractors of functional programming sometimes claim that functional programming is too difficult or counter-intuitive for most programmers to understand and use, evidence to the contrary can be found by looking at the popularity of spreadsheets. The spreadsheet paradigm…
Salvatore Caporaso, Emanuele Covino, Giovanni Pani
We harmonize many time-complexity classes DTIMEF ( f ( n )) ( f ( n ) [ges ] n ) with the PR functions (at and above the elementary level) in a transfinite hierarchy of classes of functions [Tscr ] α . Class [Tscr ] α is obtained by means of unlimited operators, namely: a variant…