Spec-Zone.ru › Haskell 9

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

OverloadedRecordDot
Since:

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

Spec-Zone.ru

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