Есть ли общий способ предотвращения переполнения при суммировании списков? - PullRequest
3 голосов
/ 23 февраля 2020

Я работаю с ByteStrings и, соответственно, с большим количеством Word8. Когда я пишу sum word8List, возвращаемое значение также является Word8, но я знаю свои данные, и эта сумма слишком велика для Word8. Должен ли я избегать суммы, или она работает не так, как я думаю?

Есть ли какая-то общая функция для суммирования чисел без переполнения, например Num a => a -> Integer?

1 Ответ

7 голосов
/ 23 февраля 2020

В сумме будет использовано (+), определенное для этого типа, поэтому для Word8 будет выполнен перенос.

Однако вы можете сначала выполнить сопоставление, например, с помощью fromIntegral :: (Integral a, Num b) => a -> b, и, таким образом, преобразовать числа в другой тип цифры c (например, Integer, Word16, Word32 и т. Д. 1016 *.). Например:

sum (<b>map fromIntegral</b> word8List) :: Integer
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...