[Int]的总和导致溢出

时间:2012-10-05 00:57:15

标签: haskell

我有一个返回[Int]的函数,我希望得到列表的总和。但是,虽然每个单独的元素都小于maxBound::Int,但总和肯定更大。

一个(人为的)例子:

ghci> sum ([1..10000000] :: [Int])
-2004260032

有没有办法强制求和累积到Integer而不是Int?我在考虑这个错误吗?

1 个答案:

答案 0 :(得分:11)

sum返回与其输入列表元素相同的类型:

sum :: Num a => [a] -> a

所以你需要传递[Integer]才能返回Integer。如果您的输入列表已经是[Int]类型,则可以使用以下函数:

sum . map fromIntegral

代替:

ghci> sum . map fromIntegral $ ([1..10000000] :: [Int])
50000005000000