-
MagicHash -
- С версии:
-
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#