我有一个返回[Int]
的函数,我希望得到列表的总和。但是,虽然每个单独的元素都小于maxBound::Int
,但总和肯定更大。
一个(人为的)例子:
ghci> sum ([1..10000000] :: [Int])
-2004260032
有没有办法强制求和累积到Integer
而不是Int
?我在考虑这个错误吗?
答案 0 :(得分:11)
sum返回与其输入列表元素相同的类型:
sum :: Num a => [a] -> a
所以你需要传递[Integer]
才能返回Integer
。如果您的输入列表已经是[Int]
类型,则可以使用以下函数:
sum . map fromIntegral
代替:
ghci> sum . map fromIntegral $ ([1..10000000] :: [Int])
50000005000000