对列表求和时是否有防止溢出的通用方法?

Jes*_*oke 3 haskell sum

我正在使用 ByteStrings,并且扩展了很多 Word8。当我写的时候sum word8List,返回的值也是 Word8,但我知道我的数据,这个总和对于 Word8 来说太大了。我应该避免总和,还是它的工作方式与我想象的不同?

是否有一些通用函数可以在不溢出的情况下对数字求和,例如Num a => a -> Integer

Wil*_*sem 7

sum 将使用(+)为该类型定义的,因此对于 a Word8,它将进行环绕。

然而,可以先执行映射,例如与fromIntegral :: (Integral a, Num b) => a -> b,因此数转换为另一种数字类型(如IntegerWord16Word32等等)。例如:

sum (map fromIntegral word8List) :: Integer
Run Code Online (Sandbox Code Playgroud)