为什么这不会导致 stackoverflow?

Why doesn't this cause stackoverflow?

8.hs我定义

digitProduct [] = 1
digitProduct (c:rest) = (read [c] :: Int) * digitProduct rest

然后在ghci里面,我运行

digitProduct $ take 10000 $ repeat '9'

它产生了一个结果:

-3633723290617080191

我本以为 10000 的递归会导致计算器溢出。另外,我的递归不是尾调用。这是怎么回事?

没什么特别的。 10,000 不足以填满堆栈。当我将 take 10000 替换为 take 100000000 时,ghci 出现堆栈溢出。