-
MagicHash -
- Since:
-
6.8.1
Включает возможность использования символа решётки (
#) в качестве постфикса идентификатора.
Расширение языка MagicHash позволяет использовать # в качестве постфиксного модификатора идентификаторов. Таким образом, x# — это допустимая переменная, а T# — допустимый конструктор типа или конструктор данных.
Знак решётки не изменяет семантики. Мы склонны использовать имена переменных, оканчивающиеся на «#», для значения или типов без упаковки (например, Int#), но это не обязательно; они являются обычными переменными. Расширение MagicHash не добавляет ничего в область видимости. Например, чтобы добавить Int# в область видимости, необходимо импортировать GHC.Exts (см. Типы без упаковки и примитивные операции); расширение MagicHash затем позволяет вам ссылаться на Int#, которое теперь находится в области видимости. Обратите внимание, что с этим вариантом меняется смысл x#y = 0: он определяет функцию x#, принимающую один аргумент y; чтобы определить оператор #, поставьте пробел: x # y = 0.
Расширение MagicHash также включает некоторые новые формы литералов (см. Типы без упаковки):
-
'x'#имеет типChar# -
"foo"#имеет типAddr#(см. Примитивные строковые литералы). -
3#имеет типInt#. В общем случае любое целое число Haskell, за которым следует#, является литераломInt#, например,-0x3A#а также32#. -
3##имеет типWord#. В общем случае любое неотрицательное целое число Haskell, за которым следует##, является литераломWord#. -
3.2#имеет типFloat#. -
3.2##имеет типDouble#