Faulty strictness analysis?
The program below aborts with 1
, whereas I would expect 2
because 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")