Stream Fusion, a popular deforestation technique in the Haskell community, cannot fuse the concatMap combinator. This is a se-rious limitation, as concatMap represents computations on nested streams. The original implementation of Stream Fusion used the Glasgow Haskell Compiler’s user-directed rewriting system. A transformation which allows the compiler to fuse many uses of concatMap has previously been proposed, but never implemented, because the host rewrite system was not expressive enough to im-plement the proposed transformation. In this paper, we develop a custom optimization plugin which implements the proposed concatMap transformation, and study the effectiveness of the trans-formation in practice. We also provide a new translation ...
In functional languages intermediate data structures are often used as glue to connect separate part...
There is often a trade-off between the clarity and efficiency of a program. Useful to transform a cl...
Functional stream representations allow for a high-level, compositional way of programming digital s...
Stream Fusion is a system for removing intermediate list data structures from functional programs, i...
In functional programming it is common practice to build modular programs by composing functions whe...
In functional programming it is common practice to build modular programs by composing functions whe...
Existing approaches to array fusion can deal with straight-line pro-ducer consumer pipelines, but ca...
Lists are often used as "glue" to connect separate parts of a program together. We propose...
Stream processing is a basic method of code optimization related to loop fusion that can improve the...
There are a number of approaches for eliminating intermediate data structures in functional programs...
We present a simple, automatic transformation — the foldr/build transformation — which successfully ...
There are a number of approaches for eliminating intermediate data structures in functional programs...
In functional languages intermediate data structures are often used as glue to connect separate part...
We propose a new algorithm for fusion transformation that allows both stacks and accumulating parame...
Fusion is one of the most important code transformations as it has the potential to substantially op...
In functional languages intermediate data structures are often used as glue to connect separate part...
There is often a trade-off between the clarity and efficiency of a program. Useful to transform a cl...
Functional stream representations allow for a high-level, compositional way of programming digital s...
Stream Fusion is a system for removing intermediate list data structures from functional programs, i...
In functional programming it is common practice to build modular programs by composing functions whe...
In functional programming it is common practice to build modular programs by composing functions whe...
Existing approaches to array fusion can deal with straight-line pro-ducer consumer pipelines, but ca...
Lists are often used as "glue" to connect separate parts of a program together. We propose...
Stream processing is a basic method of code optimization related to loop fusion that can improve the...
There are a number of approaches for eliminating intermediate data structures in functional programs...
We present a simple, automatic transformation — the foldr/build transformation — which successfully ...
There are a number of approaches for eliminating intermediate data structures in functional programs...
In functional languages intermediate data structures are often used as glue to connect separate part...
We propose a new algorithm for fusion transformation that allows both stacks and accumulating parame...
Fusion is one of the most important code transformations as it has the potential to substantially op...
In functional languages intermediate data structures are often used as glue to connect separate part...
There is often a trade-off between the clarity and efficiency of a program. Useful to transform a cl...
Functional stream representations allow for a high-level, compositional way of programming digital s...