默认情况下,GHC允许the -Woverflowed-literals
warning在文本的精度对于其类型来说太高时发出消息:
OverflowedLiterals.hs:10:12: warning: [GHC-97441] [-Woverflowed-literals]
Literal 258 is out of the Word8 range 0..255
|
10 | print (258 :: Word8)
| ^^^
OverflowedLiterals.hs:15:12: warning: [GHC-97441] [-Woverflowed-literals]
Literal 9223372036854775817 is out of the Int range -9223372036854775808..9223372036854775807
|
15 | print (9223372036854775817 :: Int)
| ^^^^^^^^^^^^^^^^^^^
字符串
是否有方法为自定义数值类型启用此警告?
例如,我想要这段代码
data Word4 = Word4 Bool Bool Bool Bool
instance Num Word4 where
...
main = print (17 :: Word4)
型
导致编译器抱怨
StackoverflowExample:LINE:COL: warning: [GHC-97441] [-Woverflowed-literals]
Literal 17 is out of the Word4 range 0..15
型
1条答案
按热度按时间chhqkbe11#
否,或者至少在写这篇文章时没有使用
ghc
。检查这一点的代码位于这里[GitHub]:字符串
因此,它将不同的(隐式)数据构造器硬编码为与
Int
,Word
,Int16
,Word32
等一起工作,从而检查相应的下限和上限。严格地说,这也许是可能的,但目前还没有实现。如果我们知道
17
被转换为的类型是Num
和Bounded
的示例,那么检查可能有点复杂,因为它只是将17
转换为fromInteger 17
。