Spec-Zone.ru › Haskell 9

6.5.10. Перегруженная точка записи

OverloadedRecordDot
С версии:

9.2.0

Предоставляет синтаксис «.» для записей, например x.foo

Если включено OverloadedRecordDot, можно написать a.b, чтобы обратиться к полю b выражения записи a.

Пример:

{-# LANGUAGE OverloadedRecordDot #-}
{-# LANGUAGE DuplicateRecordFields #-}

data Person = Person { name :: String }
data Company = Company { name :: String, owner :: Person }

main = do
  let c = Company { name = "Acme Corp."
                  , owner = Person { name = "Wile E. Coyote" } }
  print $ c.name ++ " is run by " ++ c.owner.name

Можно также написать (.b), имея в виду функцию, которая «извлекает поле b из своего аргумента». Например, (.b) a означает то же, что и a.b).

OverloadedRecordDot обычно реализуется путём преобразования синтаксиса записи . в выражения GHC.Records.getField. Включив одновременно OverloadedRecordDot и RebindableSyntax, можно преобразовывать выражения . в собственные реализации getField.

При рассмотрении a.b поле b определяется путём разрешения ограничений HasField. См. раздел Решение ограничений HasField.

© 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/overloaded_record_dot.html

Spec-Zone.ru

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