[Int]的总和导致溢出

Wil*_*uck 3 haskell

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

一个(人为的)例子:

ghci> sum ([1..10000000] :: [Int])
-2004260032
Run Code Online (Sandbox Code Playgroud)

有没有办法强迫总和积累成一个Integer而不是一个Int?我在想这个错吗?

Con*_*ker 11

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

sum :: Num a => [a] -> a
Run Code Online (Sandbox Code Playgroud)

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

sum . map fromIntegral
Run Code Online (Sandbox Code Playgroud)

代替:

ghci> sum . map fromIntegral $ ([1..10000000] :: [Int])
50000005000000
Run Code Online (Sandbox Code Playgroud)