haskell - [Int] 之和导致溢出

标签 haskell

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

一个(人为的)示例:

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

有没有办法强制sum累加为Integer而不是Int?难道是我想错了?

最佳答案

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

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

因此您需要向其传递一个[Integer]才能返回一个Integer。如果您的输入列表已经是[Int]类型,您可以使用该函数:

sum . map fromIntegral

相反:

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

关于haskell - [Int] 之和导致溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12738112/

相关文章:

用于并行化非线程安全 C++ 库的 Haskell 框架

math - 函数式编程中的对偶方法

haskell - 在 Haskell 中打印 NominalDiffTime

haskell - 如何使用比 Stackage Resolver 可用的更新版本的库

haskell - Haskell 中的 ApplicativeDo

haskell - TimeOfDay 的任意实例

haskell - 如何对惰性列表进行一次评估?

haskell - 从镜头列表创建遍历

haskell - Haskell 中的 STM 和 unsafePerformIO

Haskell - 如何在实例中简单地生成 "div"或 "/"?