我有一个返回的函数,[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)