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
,但之后您可能只会遇到运行时错误.