Следующий тип данных является представлением фосфатидной кислоты (PA - подкласс липидов). Используя масс-спектрометрию, можно получить различные уровни структурной детализации (например, от простого знания массы липида до получения полной структурной характеристики).
В настоящее время у меня есть тип данных PA как-
data PA = ClassLevelPA IntegerMass
| CombinedRadylsPA CombinedRadyls
| UnknownSnPA Radyl Radyl
| KnownSnPA { paSn1 :: Radyl
, paSn2 :: Radyl }
deriving (Show, Eq, Ord)
Это объединяет конструкторы с синтаксисом записи с теми, которые этого не делают (возможно, плохая идея). В качестве альтернативы я мог бы сделать одно из следующих действий:
data PA = ClassLevelPA { paIntegerMass :: IntegerMass }
| CombinedRadylsPA { paCombinedRadyls :: CombinedRadyls }
| UnknownSnPA { paR1 :: Radyl
, paR2 :: Radyl }
| KnownSnPA { paSn1 :: Radyl
, paSn2 :: Radyl }
data PA = ClassLevelPA IntegerMass
| CombinedRadylsPA CombinedRadyls
| UnknownSnPA Radyl Radyl
| KnownSnPA Radyl Radyl
В настоящее время я не использую функции доступа paSn1 и paSn2, но сейчас думаю, что они могут пригодиться позже. Однако более поздняя альтернатива намного чище, а также позволяет избежать необходимости иметь дело с несколькими именами полей для разных записей (до тех пор, пока в GHC не будет добавлено расширение OverloadedRecordFields). Какое из трех представлений предпочтительнее и какова позиция в отношении использования конструкторов с синтаксисом записи с теми, которые этого не делают?
paR1 (ClassLevelPA im)
) - person Random Dev   schedule 22.10.2015