FromJSON
Aesonの関数を作成しようとしています。
JSON:
{
"total": 1,
"movies": [
{
"id": "771315522",
"title": "Harry Potter and the Philosophers Stone (Wizard's Collection)",
"posters": {
"thumbnail": "http://content7.flixster.com/movie/11/16/66/11166609_mob.jpg",
"profile": "http://content7.flixster.com/movie/11/16/66/11166609_pro.jpg",
"detailed": "http://content7.flixster.com/movie/11/16/66/11166609_det.jpg",
"original": "http://content7.flixster.com/movie/11/16/66/11166609_ori.jpg"
}
}
]
}
ADT:data Movie = Movie {id::String, title::String}
私の試み:
instance FromJSON Movie where
parseJSON (Object o) = do
movies <- parseJSON =<< (o .: "movies") :: Parser Array
v <- head $ decode movies
return $ Movie <$>
(v .: "movies" >>= (.: "id") ) <*>
(v .: "movies" >>= (.: "title") )
parseJSON _ = mzero
これにより が得られCouldn't match expected type 'Parser t0' with actual type 'Maybe a0' In the first argument of 'head'
ます。
ご覧のとおり、 内の最初のムービーを選択しようとしてArray
いますが、ムービーのリストを取得してもかまいません (配列に複数ある場合)。