Faulty strictness analysis?
The program below aborts with
1, whereas I would expect
x does not need to be evaluated in
f. The same problem occurs when using guards. When
f is exported the compiler gives a warning that not all derived strictness is exported and the first parameter is strict.
This happens on the current master and itask compilers.
f :: a -> a f x = if False x (abort "2\n") Start = f (abort "1\n")