Итак, в основном вы можете сделать следующее:
data People = People { person :: String
, age :: Int
, weight :: Float
, miles :: [Float]
} deriving (Show)
testData :: [People]
testData = [ People "sara" 19 50 [5,8,8]
, People "ed" 50 60 [0,1,2]
, People "norman" 25 75 [2,3,5]
]
addMiles :: [People] -> [Float] -> [People]
addMiles ps ms = zipWith f ps ms
where
f p m = p {miles = m : init (miles p)}
или вы можете сделать как
addMiles :: [People] -> [Float] -> [People]
addMiles = zipWith (\p m -> p {miles = m : init (miles p)})
Тогда;
addMiles testData [2,1,5]
[ People {person = "sara", age = 19, weight = 50.0, miles = [2.0,5.0,8.0]}
, People {person = "ed", age = 50, weight = 60.0, miles = [1.0,0.0,1.0]}
, People {person = "norman", age = 25, weight = 75.0, miles = [5.0,2.0,3.0]}
]