[Haskell-cafe] ANNOUNCE: vector 0.1 (efficient arrays with lots of fusion)

Roman Leshchinskiy rl at cse.unsw.edu.au
Sat Jul 12 13:17:22 EDT 2008

Sebastian Sylvan wrote:
> Is there any more (easily-digested, like a paper) information available 
> about this? Specifically what things can happen in-place, and future 
> extensions...

Apart from the stream fusion papers, unfortunately no, it's all very 
much work in progress. Basically, at the moment it will avoid allocating 
some unnecessary arrays even if no loop fusion happens. So for instance, 
in something like

   map f (xs // us)

the two loops can't be fused ((//) is the same update operation as in 
Data.Array). Usually, you'd allocate one array for (xs // us) and then 
another one for the map. This library will do the map in-place if f 
doesn't change the type of the elements. This is pretty important at 
least for data-parallel code. I'll have to see how far this scales.

In the future, the fusion system will also be able to handle multiple 
directions of traversals and permutations (it can only do left-to-right 
traversals at the moment). The "Rewriting Haskell Strings" paper talks a 
bit about that but DPH has much more complex requirements so I'll have 
to use a different approach which I haven't implemented so far.


More information about the Haskell-Cafe mailing list