-
NamedFieldPuns -
Разрешает использование шуток с записями.
Шутки с записями активируются языковым расширением NamedFieldPuns.
При работе с записями часто используется шаблон, связывающий переменную с тем же именем, что и поле записи, например:
data C = C {a :: Int}
f (C {a = a}) = a
Шутки с именами полей позволяют опустить имя переменной, поэтому можно просто написать
f (C {a}) = a
что означает тот же шаблон, что и выше. То есть, в шаблоне записи шаблон a расширяется до шаблона a = a для одного и того же имени a.
Обратите внимание:
-
Шутки с записями также могут использоваться в выражении, например:
let a = 1 in C {a}вместо
let a = 1 in C {a = a}Расширение чисто синтаксическое, поэтому расширенное выражение правой части ссылается на ближайшую переменную, имя которой совпадает с именем поля.
-
Шутки и другие шаблоны могут быть смешаны в одной записи:
data C = C {a :: Int, b :: Int} f (C {a, b = 4}) = a - Шутки могут использоваться там, где встречаются шаблоны записей (например, в
letпривязках или на верхнем уровне). -
Шутка с квалифицированным именем поля расширяется путем удаления квалификатора модуля. Например:
f (C {M.a}) = aозначает
f (M.C {M.a = a}) = a(Это полезно, если селектор поля
aдля конструктораM.Cдоступен только в квалифицированной форме.)