
On 16/02/2011 11:09 PM, Max Bolingbroke wrote:
Thinking about it some more, this example is actually quite interesting because if you *prevent* the list from being floated the forM gets foldr/build fused into a totally listless optimal loop. It really does seem like a shame to disable that optimisation because of the floating... if only the fusion hit before float-out was run.
It seems to me that in this case, I'm using a list when what I actually "mean" is a stream. (Here "stream" refers to the construct used in the stream-fusion package.) I can't actually *want* a physical data structure to be constructed - so why am I asking for one? It sems to me that lots of Haskell code uses lists where it actually means streams... The stream-fusion package uses streams to fuse together list operations, but I rather suspect it would be cleaner and more helpful if people wrote code explicitly in terms of streams in the first place, except for the small minority of places where you really do want an actual list. But that's just my opinion...