
Hi, In my program I observe that, with -O2 flag turned on, Program 1 behaves like Program 2. And without O2, their outputs are different. Is it the desirable behaviour? For my program, I did not expect the optimizer to do this transformation. Thanks, Saswat Program 1: eval = \..-> let t = some_long_expression tree q = Tree (w:=q) some_long _expression in if w /= 0 then concatMap (cc con1) [tree x | x <- [1..n]] else t Program 2: eval = \..-> let t = some_long_expression tree q = Tree (w:=q) t -- Here is the difference in if w /= 0 then concatMap (cc con1) [tree x | x <- [1..n]] else t some_long_expression stands for, concatMap (cc con2) $ zipWith join (eval v c1 (reverse v1)) (eval v c2 v2)
participants (1)
-
Saswat Anand