为什么 Haskell 中的以下阶乘代码有效?

Why is the following factorial code in Haskell working?

factorial n :: (Integral a) => a -> a
factorial n = n * factorial(n-1)

上述代码有效。对于阶乘 (n=1)=1 但对于阶乘 (n=0)=0。如果是这种情况,那么为什么它适用于 n(>0) 的任何值。我的问题不应该是每个输出都是 0 吗?

这不是正确的 Haskell 代码。

首先,类型签名是无效的语法——它应该是:

fact :: (Integral a) => a -> a

其次,执行该函数不会停止,因为它没有 "stop" 条件。