
27 Apr
2014
27 Apr
'14
3:47 a.m.
On Sun, Apr 27, 2014 at 03:32:12AM +0200, Daniel Fischer wrote:
On Saturday 26 April 2014, 22:40:50, Niklas Hambüchen wrote:
As you probably now, `forM_ [1..n]` is incredibly slow in Haskell due to lack of list fusion [1];
It's not the lack of list fusion per se. If you have a
forM_ [a .. b] $ \n -> do stuff
where the type is Int, GHC is perfectly capable of eliminating the list and rewriting it to a loop (usually on par with a hand-written loop, although the core you get from a hand-written loop often is smaller and nicer to look at).
The problem is that you use the same list multiple times, and GHC thinks "hey, let me re-use that", so it gets floated to the top-level
If this is the case, does -fno-full-laziness help?