{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} module Worldcup.EventsTeams (EventTeam(..), parseEventsTeams) where import Data.Aeson import Data.Aeson.Types import Prelude as P data EventTeam = EventTeam { eventsTeamsEventId :: Int, eventsTeamsTeamId :: Int } deriving (Show) instance FromJSON EventTeam where parseJSON = withObject "team" $ \o -> do eventsTeamsEventId <- o .: "event_id" eventsTeamsTeamId <- o .: "team_id" return EventTeam{..} parseEventsTeams :: Either String [Value] -> [EventTeam] parseEventsTeams (Left x) = error x parseEventsTeams (Right xs) = P.foldl reduce [] xs where reduce acc x = case (parseEither parseJSON x :: Either String EventTeam) of (Left s) -> error s (Right v) -> v : acc