是否有一个无符号整数类型会警告负面文字?

Gab*_*lez 25 haskell ghc

ghc如果整数文字超出给定类型的范围,则最新版本将警告您.例如:

$ ghci
>>> let x = 330492039485 :: Data.Word.Word8
<interactive>:2:9: Warning:
    Literal 330492039485 is out of the GHC.Word.Word8 range 0..255
Run Code Online (Sandbox Code Playgroud)

但是,ghc不会警告Data.Word类型的负数字文字.相反,它下溢(故意,根据文档):

>>> let x = -1 :: Data.Word.Word8
>>> x
255
Run Code Online (Sandbox Code Playgroud)

是否有任何类型会警告负面文字或有没有办法我可以创建自己的自定义类型,它会发出警告?

Ørj*_*sen 37

默认情况下,像文字一样-1卑鄙negate (fromInteger 1).然而,有一种语言扩展NegativeLiterals导致它fromInteger (-1)相反.如果启用,你得到一个警告:

Prelude> :m +Data.Word
Prelude Data.Word> :set -W
Prelude Data.Word> :set -XNegativeLiterals
Prelude Data.Word> -1 :: Word

<interactive>:74:1: Warning:
    Literal -1 is out of the Word range 0..18446744073709551615
18446744073709551615
Prelude Data.Word>
Run Code Online (Sandbox Code Playgroud)

或者,您可以创建自己重新定义的类型negate,但之后您可能只会遇到运行时错误.