-
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.