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.
Roman
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe