Последние версии ghc
будут предупреждать вас, если целочисленный литерал находится за пределами заданного диапазона типов. Например:
$ ghci
>>> let x = 330492039485 :: Data.Word.Word8
<interactive>:2:9: Warning:
Literal 330492039485 is out of the GHC.Word.Word8 range 0..255
Однако ghc
не будет предупреждать об отрицательных числовых литералах для типов Data.Word
. Вместо этого он подпадает (преднамеренно, согласно документации):
>>> let x = -1 :: Data.Word.Word8
>>> x
255
Существуют ли какие-либо типы, которые будут предупреждать об отрицательных литералах, или есть способ создать свой собственный настраиваемый тип, который предупреждает?