On Wed, Aug 18, 2010 at 4:38 PM, Lennart Augustsson <lennart.augustsson@gmail.com> wrote:
You don't know that f is strict in its first argument so you cannot
deduce that go is strict in z in the first case.

I'm not sure I understand.

f :: Int -> Int -> Int -> Int
f = \x y z -> x + y + z

in this particular case so it's strict in all its parameters since + is strict (for Ints). f is inlined into go so it should be possible to deduce that go is indeed strict. As I mentioned to Ian you get the same result if you inline f manually.

Cheers,
Johan