[Haskell-cafe] multiple computations, same input

Jan-Willem Maessen Janwillem.Maessen at sun.com
Tue Mar 28 15:17:44 EST 2006


On Mar 28, 2006, at 1:02 AM, Tomasz Zielonka wrote:

> On Mon, Mar 27, 2006 at 03:10:18PM -0800, Greg Fitzgerald wrote:
>>> hold a part of the data in memory while you show the first one,
>>
>> Here would be a better example then.
>>
>>     f lst = show (sum (filter (> 1) lst), sum (filter (> 2) lst))
>>
>> It ought to be *possible* to compute both operations without  
>> holding onto
>> any of the list elements.
>
> I wonder if it would be possible to remove the space-leak by  
> running both
> branches concurrently, and scheduling threads in a way that would
> minimise the space-leak. I proposed this before
>
>   http://www.haskell.org/pipermail/haskell-cafe/2005-December/ 
> 013428.html
>
> I would like to hear opinions from some compiler gurus.

This is possible in principle with something like resource-bounded  
eagerness, but it's not at all easy.  The problem is this: when lst  
gets big, you need to identify who's hanging on to it, and figure out  
that they are actually planning to consume it and come up with  
something smaller as a result.  This is all pretty heavyweight---not  
hard in principle, but hard enough in practice that it may not be  
worth the investment.

That said, there's a transformation that goes something like this:

a = foldr f z xs         ==>           (a,b) = foldr (f `cross` g)  
(z,y) xs
b = foldr g y xs

This could in principle at least pluck the lowest-hanging fruit (sum,  
filter, etc.).
However it runs into some significant problems:
- Only works with folds
- Has some problems with bottoms, if I recall rightly
- Not expressible using something like RULES;
    requires a special transformation in the compiler.
- It is often a pessimization.

That last point is a killer.

>
> Best regards
> Tomasz
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe



More information about the Haskell-Cafe mailing list