Strictness problem
As requested, this is a resubmission (and update) of a
previously reported bug, to get it into the bug tracker.
The following program should output something involving
Correct:
> module Main where
> f x = case x of
> x@True -> \y -> x && y
> x@False -> \y -> x && y
> main = putStrLn $ f (error "Correct") `seq` "Error"
However, whether it does so is a non-trivial function
of the GHC version and optimisation settings:
GHC version -O2? Correct?
------------------------------
4.08.1 No Yes
4.08.1 Yes No
5.04.2 No No
5.04.2 Yes Yes
6.0.1 _ No
6.2.2 _ No
6.4 _ No
6.4.1.20050820 _ No
All tests were run on a Solaris system.
Different fs give different behaviour, at least for
6.0.1. Try e.g.
> f x = case x of
> True -> id
> False -> id