-
NegativeLiterals -
- Since:
-
7.8.1
Включить отрицательные числовые литералы.
Литерал -123 согласно Haskell98 и Haskell 2010 представляет собой два токена: унарный минус (-) и число 123, и разворачивается как negate (fromInteger 123). Расширение языка NegativeLiterals заставляет его обрабатываться как один токен и разворачивается как fromInteger (-123).
Это может быть полезно, когда диапазоны положительных и отрицательных значений числового типа данных не совпадают. Например, в 8-битной арифметике -128 представляется, но +128 нет. Поэтому negate (fromInteger 128) вызовет неожиданное сообщение об ошибке переполнения целочисленного литерала.
Можно вставить пробелы, как в - 123, чтобы принудительно интерпретировать их как два токена.
В версии 9.0 поведение этого расширения изменилось, и теперь требуется, чтобы отрицательный литерал не предшествовал закрывающий токен (см. Предложение GHC #229 для определения закрывающего токена). Другими словами, мы анализируем f -123 как f (-123), но x-123 как (-) x
123. До этой поправки NegativeLiterals заставляло x-123 анализироваться как x(-123).
NegativeLiterals является подмножеством LexicalNegation. То есть, включение обоих этих расширений имеет тот же эффект, что и включение LexicalNegation в одиночку.