Я довольно новый программист Haskell, и я пытаюсь понять, как получить некоторые значения в алгебраическом типе данных.Инициализация типа алгебраических данных из списка
У меня есть тип записи данных:
data OrbitElements = OrbitElements { epoch :: Double,
ecc :: Double,
distPeri :: Double,
incl :: Double,
longAscNode :: Double,
argPeri :: Double,
timePeri :: Double,
meanMotion :: Double,
meanAnomaly :: Double,
trueAnomaly :: Double,
semiMajorAxis :: Double,
distApo :: Double,
period :: Double
}
Я вытягивать в некоторой информации из текстового файла, который заканчивается в списке двойников. Есть ли простой способ инициализировать этот тип данных со списком? Я мог бы просто называть каждого сеттера индивидуально, но это кажется ужасно неэффективным, когда у меня уже есть все значения в списке.
let d = [2456382.5,6.786842103348031e-3,0.7184187640759256,3.394660181513041,76.64395338801751,55.2296201483587,2456457.141012543,1.602144936476915,240.4142797010899,239.7408018186761,0.7233278761603762,0.7282369882448266,224.6987721295883]
let o = OrbitElements
let epoch o = d !! 0
let ecc o = d !! 1
-- and so on
Что мне не хватает?
Спасибо, это подтвердили мои подозрения, и любой ответ, который начинается «Во-первых, мы определяем два парсера ... »отлично подойдет в моей книге. :) –
Опция« вручную »становится более привлекательной в сочетании с [' -XRecordWildCards'] (http://www.haskell.org/ghc/docs/7.4 .2/html/users_guide/syntax-extns.html # record-wildcards): 'fromList [epoch, ecc, distPeri, включая longAscNode, argPeri, timePeri, meanMotion, meanAnomaly, trueAnomaly, semiMajorAxis, distApo, period] = Just OrbitElements {..} '. –