Haskell [Int]之和导致溢出

Haskell [Int]之和导致溢出,haskell,Haskell,我有一个返回[Int]的函数,我想取列表的总和。然而,虽然每个元素都小于maxBound::Int,但总和肯定更大 一个(人为的)例子: 有没有办法强迫总和累加成一个整数而不是Int?我是否认为这是错误的?sum返回与其输入列表元素相同的类型: sum :: Num a => [a] -> a 因此,您需要向它传递一个[Integer],以返回一个整数。如果输入列表的类型已经是[Int],则可以使用以下功能: sum . map fromIntegral 相反: ghci>

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

一个(人为的)例子:


有没有办法强迫总和累加成一个
整数而不是
Int
?我是否认为这是错误的?

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

sum :: Num a => [a] -> a
因此,您需要向它传递一个
[Integer]
,以返回一个
整数。如果输入列表的类型已经是
[Int]
,则可以使用以下功能:

sum . map fromIntegral
相反:

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

sum$map from integral
是这样做的合适方法吗?哈哈哈,在你发布这篇文章前几秒钟,我得出了同样的结论。太好了。考虑到类型是
::Num a=>a
,我很惊讶这能起作用。这是GHCi的默认类型吗?@Matt Fenwick:是的,整数默认用于Num a=>a。
ghci> sum . map fromIntegral $ ([1..10000000] :: [Int])
50000005000000