Haskell: упражнение Уилла Курта - получение дополнительной информации из словаря - PullRequest
0 голосов
/ 04 ноября 2018

Упражнение 28.3 "получить программирование с помощью haskell" от Уилла Курта. Идея состоит в том, чтобы использовать самую дешевую часть робота, используя аппликативные функторы. Теперь я написал код ниже, который делает именно это, но я не хочу знать стоимость, а на самом деле всю часть (имя, описание и т. Д.). Мне кажется бессмысленным указывать только номер. Пробовал сопоставлять шаблоны и даже обманывать, используя сортировку, чтобы найти правильное решение, но я наверняка что-то упускаю. Мой квалифицированный импорт Data.Map называется DAMA

data RoPart = RoPart { fpName :: String
                     , fpDesc :: String
                     , fpCost :: Int
                     , fpCount :: Int
                     } deriving Show
fpLeftArm = RoPart "Left Arm" "Left hydraulic arm of robot" 2000 1
fpRightArm = RoPart "Right Arm" "Electrically actuated arm of robot" 3425 2
fpHead = RoPart "Head" "Camera operated AI control unit for robot" 9456 3
fpBody = RoPart "Body" "Mounting unit for various robot parts" 6788 4
fpMove = RoPart "Transport" "Caterpillar-operated transportation unit" 4590 5

fpPartsList = [fpLeftArm, fpRightArm, fpHead, fpBody, fpMove]
fpPartsIndex = [1..5]
fpDictionary = DAMA.fromList (zip fpPartsIndex fpPartsList)

fPrintCost :: Maybe Int -> IO ()
fPrintCost Nothing = putStrLn "item missing from dBase"
fPrintCost (Just fpCost) = print fpCost

fpEnterPart :: IO ()
fpEnterPart = do
  putStrLn "Provide part number 1: "
  val1 <- getLine
  putStrLn "Provide part number 2: "
  val2 <- getLine
  let part1 = DAMA.lookup (read val1) fpDictionary
  let part2 = DAMA.lookup (read val2) fpDictionary
  let cheapest = min <$> (fpCost <$> part1) <*> (fpCost <$> part2)
  fPrintCost cheapest
...