这个用于计算第40个斐波纳契数的代码似乎就此挂起了。它似乎是以慢递归的方式计算它。
fibs :: (Num a, Enum a) => [a]
fibs = 0 : zipWith (+) fibs (1 : fibs)
main = do
print (fibs !! 40 :: Integer)
另一方面,如果我将纤维的类型改为
fibs :: [Integer]
然后立即计算它。
为什么更改类型以使其更具体有效地更改用于计算它的算法?这是GHC中的一个错误,还是有一些基本的东西?