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

Spec-Zone.ru

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