如果整数文本超出了给定类型的范围,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
是否有任何类型会对负面文本发出警告,或者我是否可以创建自己的自定义类型来发出警告?
发布于 2014-10-26 17:06:26
默认情况下,像-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>
或者,您可以自己创建重新定义negate
的类型,但可能只会得到一个运行时错误。
https://stackoverflow.com/questions/26574302
复制相似问题