Spec-Zone.ru › Haskell 9

6.9.1. Отрицательные литералы

NegativeLiterals
Начиная с:

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.

© 2002–2007 The University Court of the University of Glasgow. All rights reserved.
Licensed under the Glasgow Haskell Compiler License.
https://downloads.haskell.org/~ghc/9.14.1/docs/users_guide/exts/negative_literals.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API