{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE OverloadedStrings #-} -- | -- Module : Web.HackerNews.Update -- Copyright : (c) David Johnson, Konstantin Zudov, 2014 -- Maintainer : djohnson.m@gmail.com -- Stability : experimental -- Portability : POSIX module Web.HackerNews.Update where import Control.Applicative ((<$>), (<*>)) import Control.Monad (MonadPlus (mzero)) import Data.Aeson (FromJSON (parseJSON), Value (Object), (.!=), (.:), (.:?)) import Data.Text (Text) import Web.HackerNews.Endpoint (Endpoint (endpoint)) ------------------------------------------------------------------------------ -- | Update Object data Update = Update { updateItems :: [Int] , updateProfiles :: [Text] , updateDeleted :: Bool , updateDead :: Bool } deriving (Show, Eq) ------------------------------------------------------------------------------ -- | Update ID for an `Updated` Object data UpdateId = UpdateId deriving (Show, Eq) ------------------------------------------------------------------------------ -- | Endpoint Instances instance Endpoint UpdateId Update where endpoint _ = "updates" ------------------------------------------------------------------------------ -- | JSON Instances instance FromJSON Update where parseJSON (Object o) = Update <$> o .: "items" <*> o .: "profiles" <*> o .:? "deleted" .!= False <*> o .:? "dead" .!= False parseJSON _ = mzero