我有这个数据结构来从Haskell中的JSON获取结果,使用aeson
通过以下网址:http://fipeapi.appspot.com/api/1/carros/marcas.json
data Marca =
Marca { keyM :: String
, idM :: Int
, fipe_nameM :: String
, nameM :: String
} deriving Show
instance FromJSON Marca where
parseJSON (Object m) =
Marca <$> m .: "key"
<*> m .: "id"
<*> m .: "fipe_name"
<*> m .: "name"
parseJSON _= mzero
这工作正常,我将结果存储在名为“ps”
的“Marca”列表中main :: IO ()
main = do
d <- (eitherDecode <$> getJSON) :: IO (Either String [Marca])
case d of
Left err -> putStrLn err
Right ps -> print ps
return();
现在我必须从这个“ps”创建一个Int列表,其中包含来自每个“Marca”的所有“idM”,但我不知道如何做到这一点,我尝试了一些类似的事情:
Right ps -> let newlist = [idM x | x <- ps]
Right ps -> let newlist = [idM x | x <- [Marca]]
或
Right ps -> let newlist = map (idM x) ps
Right ps -> let newlist = map (idM x) [Marca]
但它不起作用。