Optimising purely functional GPU programs
Purely functional, embedded array programs are a good match for SIMD hardware, such as
GPUs. However, the naive compilation of such programs quickly leads to both code …
GPUs. However, the naive compilation of such programs quickly leads to both code …
Three complementary approaches to bidirectional programming
This paper surveys three distinct approaches to bidirectional programming. The first
approach, syntactic bidirectionalization, takes a program describing the forward …
approach, syntactic bidirectionalization, takes a program describing the forward …
Generic programming
The development of science proceeds in a cycle of activities, the so-called abstraction-
specialisation cycle. Abstraction is the process of seeking patterns or commonalities, which …
specialisation cycle. Abstraction is the process of seeking patterns or commonalities, which …
Higher-order multi-parameter tree transducers and recursion schemes for program verification
We introduce higher-order, multi-parameter, tree transducers (HMTTs, for short), which are
kinds of higher-order tree transducers that take input trees and output a (possibly infinite) …
kinds of higher-order tree transducers that take input trees and output a (possibly infinite) …
How functional programming mattered
In 1989 when functional programming was still considered a niche topic, Hughes wrote a
visionary paper arguing convincingly 'why functional programming matters'. More than two …
visionary paper arguing convincingly 'why functional programming matters'. More than two …
GRoundTram: An integrated framework for developing well-behaved bidirectional model transformations
Bidirectional model transformation is useful for maintaining consistency between two
models, and has many potential applications in software development including model …
models, and has many potential applications in software development including model …
Parallelization in calculational forms
The problems involved in developing efficient parallel programs have proved harder than
those in developing efficient sequential ones, both for programmers and for compilers …
those in developing efficient sequential ones, both for programmers and for compilers …
The third homomorphism theorem on trees: downward & upward lead to divide-and-conquer
Parallel programs on lists have been intensively studied. It is well known that associativity
provides a good characterization for divide-and-conquer parallel programs. In particular, the …
provides a good characterization for divide-and-conquer parallel programs. In particular, the …
You Say'What', I Hear'Where'and'Why':(Mis-) Interpreting SQL to Derive Fine-Grained Provenance
SQL declaratively specifies what the desired output of a query is. This work shows that a non-
standard interpretation of the SQL semantics can, instead, disclose where a piece of the …
standard interpretation of the SQL semantics can, instead, disclose where a piece of the …
Sparcl: a language for partially-invertible computation
Invertibility is a fundamental concept in computer science, with various manifestations in
software development (serializer/deserializer, parser/printer, redo/undo, compressor …
software development (serializer/deserializer, parser/printer, redo/undo, compressor …