6.9.1. Negative literals — Glasgow Haskell Compiler 9.0.1 User's Guide

# 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.