Я только что раскрыл эту путаницу и хотел бы подтвердить, что это то, что есть. Если, конечно, я просто что-то пропустил.
Скажем, у меня есть эти объявления данных:
data VmInfo = VmInfo {name, index, id :: String} deriving (Show)
data HostInfo = HostInfo {name, index, id :: String} deriving (Show)
vm = VmInfo "vm1" "01" "74653"
host = HostInfo "host1" "02" "98732"
То, что я всегда думал и что кажется настолько естественным и логичным, таково:
vmName = vm.name
hostName = host.name
Но это, очевидно, не работает. Я получил это.
Вопросы
Итак, мои вопросы.
-
Когда я создаю тип данных с синтаксисом записи, должен ли я убедиться, что все поля имеют уникальные имена? Если да - почему?
-
Есть ли какой-то чистый способ или что-то подобное "оператору разрешения области", например
::
или.
и т.д., так что Haskell отличает, какой тип данныхname
(или любой другой нет уникальные поля) принадлежит и возвращает правильный результат? -
Каков правильный способ справиться с этим, если у меня есть несколько объявлений с одинаковыми именами полей?
В качестве дополнительной заметки.
В общем, мне нужно возвращать типы данных, аналогичные приведенному выше примеру. Сначала я вернул их в виде кортежей (в то время мне казалось правильным способом). Но кортежи с трудом работают, поскольку невозможно просто выделить отдельные части сложного типа, как с помощью списков, используя "!!". Итак, следующее, что я подумал о словарях/хешах. Когда я пробовал использовать словари, я подумал, что тогда нужно иметь собственные типы данных? Типы воспроизведения/обучения данных я столкнулся с тем, что привело меня к вышеуказанному вопросу. Поэтому мне кажется, что легче использовать словари вместо собственных типов данных, так как я могу использовать те же поля для разных объектов.
Не могли бы вы рассказать об этом и рассказать мне, как это делается в реальном мире?