Ответ 1
Нет, это в настоящее время не поддерживается. Стандартным подходом является префикс каждого поля с чем-то уникальным для конкретного типа данных, например. p2x
, p2y
, p3x
и т.д.
Причина, по которой это не поддерживается, заключается в том, что каждое имя поля записи неявно генерирует функцию "селектора", например. x :: Point2 -> Float
. Наличие двух полей с тем же именем в одном и том же поле создаст столкновение.
Это многолетний жучок для многих людей и будет рассмотрен предстоящим расширением языка OverloadedRecordFields
, который, мы надеемся, будет частью от GHC 7.12 (ожидается в начале 2016 года).
Если включено, это расширение позволит использовать одно и то же имя поля в нескольких записях. Селектор полей будет иметь перегруженный тип, который обычно будет разрешаться по типу вывода.