NegativeLiterals在什么情况下会改变行为?

Sri*_*aic 6 haskell language-extension

虽然描述NegaskLiterals Haskell学校展示了如何使用语言扩展可能会改变某些代码的性能然后说

其他示例实际上可能会改变行为,而不是简单地降低效率

在使用扩展程序后,我无法找到任何这些行为更改实例.我只能找到他们正在谈论的性能变化以及一些在有和没有扩展名时会出错的程序.

在启用NegativeLiterals扩展时,这些程序会改变其行为?

Tho*_*son 5

负文字的差异是我们否定整数然后调用fromInteger或调用fromInteger然后否定密码域的类型的差异.也就是说,fromInteger . negate是不一样的negate . fromInteger.我希望当你处于某种类型的界限时会发生这种情况 - 一种可能在另一种情况下饱和.

例如,我有一个非常简单的坏类型:

data Bad = Bad Integer
    deriving (Show)

instance Num Bad where
    negate (Bad a) = Bad (a + 1)
    fromInteger = Bad
Run Code Online (Sandbox Code Playgroud)

结果如下:

*Main> (-1) :: Bad
Bad 2
*Main> :set -XNegativeLiterals
*Main> (-1) :: Bad
Bad (-1)
*Main>
Run Code Online (Sandbox Code Playgroud)