
My understanding was that the reason is that CSE can cause things to be
shared that take up a lot of space when normally they would be garbage
collected sooner.
On Feb 18, 2012 11:57 AM, "Roman Cheplyaka"
It doesn't matter. Laziness would be affected if, for instance, something is not evaluated without CSE and is evaluated with it.
In your example either all or none of 'a' and 'b' get evaluated, depending on whether the top-level expression is evaluated.
* Victor Gorokgov
[2012-02-18 18:23:19+0400] example = a + b + a + b
exampleCSE = x + x where x = a + b
With CSE we are introducing new thunk: x.
18.02.2012 17:38, Roman Cheplyaka пишет:
* Holger Siegel
[2012-02-18 12:52:08+0100] You cannot. Common subexpression elimination is done by GHC very conservatively, because it can not only affect impure programs: it can also affects strictness/lazyness and worsen memory usage of pure code. Like the HaskellWiki says: "If you care about CSE, do it by hand." How can it affect strictness or laziness?
-- Roman I. Cheplyaka :: http://ro-che.info/
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe