
Hi, I have a list of index-value pairs and I want to get a list which is sorted by the index and which contains index-wise sums of all the values. Here is a function that does this (and a bit more). --- pixelHistogram samples = let index s t = let x = round $ (fromIntegral imageWidth) * (1-s) y = round $ (fromIntegral imageHeight) * (1-t) in y*imageWidth + x indexedSamples = [(index s t, color) | (s, t, color) <- samples] pixelArray :: Array Int Color pixelArray = accumArray (\+) black (0, imageWidth*imageHeight) indexedSamples in elems pixelArray --- The problem is that this function is very inefficient. It seems that the whole indexedSamples list is stored in memory when creating pixelArray. When I do some profiling I see that the heap consumption of this function grows linearly. If I just write the samples list to a file instead of first summing them, I get a nice and flat heap profile. So how to do this efficiently? Thanks, Lauri