Results 1  10
of
37
The Worker/Wrapper Transformation
 Journal of Functional Programming
, 2009
"... The worker/wrapper transformation is a technique for changing the type of a computation, usually with the aim of improving its performance. It has been used by compiler writers for many years, but the technique is little known in the wider functional programming community, and has never been describ ..."
Abstract

Cited by 15 (7 self)
 Add to MetaCart
The worker/wrapper transformation is a technique for changing the type of a computation, usually with the aim of improving its performance. It has been used by compiler writers for many years, but the technique is little known in the wider functional programming community, and has never been described precisely. In this article we explain, formalise and explore the generality of the worker/wrapper transformation. We also provide a systematic recipe for its use as an equational reasoning technique for improving the performance of programs, and illustrate the power of this recipe using a range of examples. 1
Infinite sets that admit fast exhaustive search
 In Proceedings of the 22nd Annual IEEE Symposium on Logic In Computer Science
, 2007
"... Abstract. Perhaps surprisingly, there are infinite sets that admit mechanical exhaustive search in finite time. We investigate three related questions: What kinds of infinite sets admit mechanical exhaustive search in finite time? How do we systematically build such sets? How fast can exhaustive sea ..."
Abstract

Cited by 14 (8 self)
 Add to MetaCart
Abstract. Perhaps surprisingly, there are infinite sets that admit mechanical exhaustive search in finite time. We investigate three related questions: What kinds of infinite sets admit mechanical exhaustive search in finite time? How do we systematically build such sets? How fast can exhaustive search over infinite sets be performed? Keywords. Highertype computability and complexity, Kleene–Kreisel functionals, PCF, Haskell, topology. 1.
Exhaustible sets in highertype computation
 Logical Methods in Computer Science
"... Abstract. We say that a set is exhaustible if it admits algorithmic universal quantification for continuous predicates in finite time, and searchable if there is an algorithm that, given any continuous predicate, either selects an element for which the predicate holds or else tells there is no examp ..."
Abstract

Cited by 13 (12 self)
 Add to MetaCart
Abstract. We say that a set is exhaustible if it admits algorithmic universal quantification for continuous predicates in finite time, and searchable if there is an algorithm that, given any continuous predicate, either selects an element for which the predicate holds or else tells there is no example. The Cantor space of infinite sequences of binary digits is known to be searchable. Searchable sets are exhaustible, and we show that the converse also holds for sets of hereditarily total elements in the hierarchy of continuous functionals; moreover, a selection functional can be constructed uniformly from a quantification functional. We prove that searchable sets are closed under intersections with decidable sets, and under the formation of computable images and of finite and countably infinite products. This is related to the fact, established here, that exhaustible sets are topologically compact. We obtain a complete description of exhaustible total sets by developing a computational version of a topological Arzela–Ascoli type characterization of compact subsets of function spaces. We also show that, in the nonempty case, they are precisely the computable images of the Cantor space. The emphasis of this paper is on the theory of exhaustible and searchable sets, but we also briefly sketch applications. 1.
Feldspar: A Domain Specific Language for Digital Signal Processing algorithms
 IN: PROC. 8 TH ACM/IEEE INTERNATIONAL CONFERENCE ON FORMAL METHODS AND MODELS FOR CODESIGN. IEEE
, 2010
"... ... highlevel and platformindependent description of digital signal processing (DSP) algorithms. Feldspar is a pure functional language embedded in Haskell. It offers a highlevel dataflow style of programming, as well as a more mathematical style based on vector indices. The key to generating eff ..."
Abstract

Cited by 13 (3 self)
 Add to MetaCart
... highlevel and platformindependent description of digital signal processing (DSP) algorithms. Feldspar is a pure functional language embedded in Haskell. It offers a highlevel dataflow style of programming, as well as a more mathematical style based on vector indices. The key to generating efficient code from such descriptions is a highlevel optimization technique called vector fusion. Feldspar is based on a lowlevel, functional core language which has a relatively small semantic gap to machineoriented languages like C. The core language serves as the interface to the backend code generator, which produces C. For very small examples, the generated code performs comparably to handwritten C code when run on a DSP target. While initial results are promising, to achieve good performance on larger examples, issues related to memory access patterns and array copying will have to be addressed.
A Functional I/O System ∗ or, Fun for Freshman Kids
"... Functional programming languages ought to play a central role in mathematics education for middle schools (age range: 10–14). After all, functional programming is a form of algebra and programming is a creative activity about problem solving. Introducing it into mathematics courses would make preal ..."
Abstract

Cited by 8 (3 self)
 Add to MetaCart
Functional programming languages ought to play a central role in mathematics education for middle schools (age range: 10–14). After all, functional programming is a form of algebra and programming is a creative activity about problem solving. Introducing it into mathematics courses would make prealgebra course come alive. If input and output were invisible, students could implement fun simulations, animations, and even interactive and distributed games all while using nothing more than plain mathematics. We have implemented this vision with a simple framework for purely functional I/O. Using this framework, students design, implement, and test plain mathematical functions over numbers, booleans, string, and images. Then the framework wires them up to devices and performs all the translation from external information to internal data (and vice versa)—just like every other operating system. Once middle school students are hooked on this form of programming, our curriculum provides a smooth path for them from prealgebra to freshman courses in college on objectoriented design and theorem proving. Categories and Subject Descriptors D.2.10 [Software Engineering]:
Reasoning About Effects: Seeing the Wood Through the Trees (Extended Version)
"... Pure functional languages such as Haskell support programming with impure effects by exploiting mathematical notions such as monads, applicative functors, and arrows. However, in contrast to the wealth of research on the use of these notions to write effectful programs, there has been comparatively ..."
Abstract

Cited by 8 (0 self)
 Add to MetaCart
Pure functional languages such as Haskell support programming with impure effects by exploiting mathematical notions such as monads, applicative functors, and arrows. However, in contrast to the wealth of research on the use of these notions to write effectful programs, there has been comparatively little progress on reasoning about the resulting programs. In this article we focus on this problem, using a simple but instructive example concerned with relabelling binary trees. 1
Factorising Folds for Faster Functions
"... The worker/wrapper transformation is a general technique for improving the performance of recursive programs by changing their types. The previous formalisation (Gill & Hutton, 2009) was based upon a simple fixed point semantics of recursion. In this article we develop a more structured approach, ba ..."
Abstract

Cited by 7 (3 self)
 Add to MetaCart
The worker/wrapper transformation is a general technique for improving the performance of recursive programs by changing their types. The previous formalisation (Gill & Hutton, 2009) was based upon a simple fixed point semantics of recursion. In this article we develop a more structured approach, based upon initial algebra semantics. In particular, we show how the worker/wrapper transformation can be applied to programs defined using the structured pattern of recursion captured by fold operators, and illustrate our new technique with a number of examples.
Towards Modular Compilers for Effects
"... Abstract. Compilers are traditionally factorised into a number of separate phases, such as parsing, type checking, code generation, etc. However, there is another potential factorisation that has received comparatively little attention: the treatment of separate language features, such as mutable st ..."
Abstract

Cited by 3 (1 self)
 Add to MetaCart
Abstract. Compilers are traditionally factorised into a number of separate phases, such as parsing, type checking, code generation, etc. However, there is another potential factorisation that has received comparatively little attention: the treatment of separate language features, such as mutable state, input/output, exceptions, concurrency and so forth. In this article we focus on the problem of modular compilation, in which the aim is to develop compilers for separate language features independently, which can then be combined as required. We summarise our progress to date, issues that have arisen, and further work.
The Quantum IO Monad
"... The Quantum IO monad is a purely functional interface to quantum programming implemented as a Haskell library. At the same time it provides a constructive semantics of quantum programming. The QIO monad separates reversible (i.e. unitary) and irreversible (i.e. probabilistic) computations and provid ..."
Abstract

Cited by 3 (2 self)
 Add to MetaCart
The Quantum IO monad is a purely functional interface to quantum programming implemented as a Haskell library. At the same time it provides a constructive semantics of quantum programming. The QIO monad separates reversible (i.e. unitary) and irreversible (i.e. probabilistic) computations and provides a reversible let operation (ulet), allowing us to use ancillas (auxiliary qubits) in a modular fashion. QIO programs can be simulated either by calculating a probability distribution or by embedding it into the IO monad using the random number generator. As an example we present a complete implementation of Shor’s algorithm.
A graph model of data and workflow provenance
 IN PROCEEDINGS OF THE 2ND USENIX WORKSHOP ON THE THEORY AND PRACTICE OF PROVENANCE (TAPP ’10
, 2010
"... Provenance has been studied extensively in both database and workflow management systems, so far with little convergence of definitions or models. Provenance in databases has generally been defined for relational or complex object data, by propagating finegrained annotations or algebraic expression ..."
Abstract

Cited by 3 (1 self)
 Add to MetaCart
Provenance has been studied extensively in both database and workflow management systems, so far with little convergence of definitions or models. Provenance in databases has generally been defined for relational or complex object data, by propagating finegrained annotations or algebraic expressions from the input to the output. This kind of provenance has been found useful in other areas of computer science: annotation databases, probabilistic databases, schema and data integration, etc. In contrast, workflow provenance aims to capture a complete description of evaluation – or enactment – of a workflow, and this is crucial to verification in scientific computation. Workflows and their provenance are often presented using graphical notation, making them easy to visualize but complicating the formal semantics that relates their runtime behavior with their provenance records. We bridge this gap by extending a previouslydeveloped dataflow language which supports both databasestyle querying and workflowstyle batch processing steps to produce a workflowstyle provenance graph that can be explicitly queried. We define and describe the model through examples, present queries that extract other forms of provenance, and give an executable definition of the graph semantics of dataflow expressions.