Spec-Zone.ru › Haskell 9

6.5.7. Шутливое использование записей

NamedFieldPuns
С момента:

6.10.1

Статус:

Включено в GHC2024, GHC2021

Разрешает использование шуток с записями.

Шутки с записями активируются языковым расширением 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 доступен только в квалифицированной форме.)

© 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.12.1/docs/users_guide/exts/record_puns.html

Spec-Zone.ru

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