>>693
product [1..20]がオーバーフローしている。

ghciで [20 - f 20] としたときはたぶんf 20の20がIntegerとして評価されているからオーバーフローが生じていない。
ghciで[20 - f (20 :: Integer)]と[20 - f (20::Int)]を比較して、考えれば、言っていることが分かるだろう。