すみません、質問させてください。以下のコードが、なぜか意図した通りに動作しません。
(一応なるべく簡略化したので、このコード自体に深い意味はないです)

combination n r =div (product [1..n]) (product [1..r] * product [1..n-r])
f n = length (takeWhile (<=4000) (map (combination n) [1..5] ))
hoge = [n - f n | n<-[20]]

私はこの hoge を [20 - f 20] のつもりで書きました。GHCで [20 - f 20] と入力すると 17 と返ってくるので、 hoge は [17] になっていてほしいです。
なのに、なぜか hoge と入力すると [15] が返ってきます。どなたかどこが誤っているのかわかる方がいらっしゃったら教えていただけないでしょうか。