6.9.1. Negative literals
- NegativeLiterals
- Since:
7.8.1
Enable negative numeric literals.
The literal -123 is, according to Haskell98 and Haskell 2010,
two tokens, a unary minus (-) and the number 123, and is
desugared as negate (fromInteger 123). The language extension
NegativeLiterals causes it to be treated as a single
token and desugared as fromInteger (-123).
This can be useful when the positive and negative range of a numeric
data type don’t match up. For example, in 8-bit arithmetic -128
is representable, but +128 is not. So negate (fromInteger 128)
will elicit an unexpected integer-literal-overflow message.
Whitespace can be inserted, as in - 123, to force interpretation
as two tokens.
In 9.0, the behavior of this extension changed, and now we require that a negative literal must not be preceded by a closing token (see
GHC Proposal #229
for the definition of a closing token). In other words, we parse f -123 as f (-123), but x-123 as (-) x
123. Before this amendment, NegativeLiterals caused x-123 to be parsed as x(-123).
NegativeLiterals is a subset of LexicalNegation. That
is, enabling both of those extensions has the same effect as enabling
LexicalNegation alone.