首页 > 解决方案 > 汇总列表时是否有防止溢出的通用方法?

问题描述

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

是否有一些通用功能可以对数字求和而不会溢出,例如Num a => a -> Integer

标签: haskellsum

解决方案


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

但是,您可以先执行映射,例如使用fromIntegral :: (Integral a, Num b) => a -> b,然后将数字转换为另一种数字类型(如IntegerWord16Word32等)。例如:

sum (map fromIntegral word8List) :: Integer

推荐阅读