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