3

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

一个(人为的)例子:

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

有什么办法可以强制 sum 累积成 anInteger而不是 an Int?我想错了吗?

4

1 回答 1

11

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

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

所以你需要传递它 a[Integer]才能返回一个Integer. 如果您的输入列表已经是 type [Int],您可以使用该函数:

sum . map fromIntegral

反而:

ghci> sum . map fromIntegral $ ([1..10000000] :: [Int])
50000005000000
于 2012-10-05T01:06:39.863 回答