Hugs December-2001 has the following behaviour:
let fact a x = if x <= 1 then a else fact (a * x) (x - 1) in fact 1 8000
{- a darn large number -}
let fact a x = if x <= 1 then a else (fact $! a * x) (x - 1) in fact 1 9000
{- a much bigger number -}
let fact a x = if x <= 1 then a else fact (a * x) (x - 1) in fact 1 9000
Segmentation fault
best,
leon