module Sound.Freesound.List (
List
, elems
, numElems
, previous
, next
, getPrevious
, getNext
) where
import Control.Monad (liftM, mzero)
import Data.Aeson
import Sound.Freesound.API (Freesound, Resource, get)
#if __GLASGOW_HASKELL__ < 710
import Control.Applicative
#endif
data List a = List {
elems :: [a]
, numElems :: Int
, previous :: Maybe (Resource (List a))
, next :: Maybe (Resource (List a))
} deriving (Eq, Show)
instance FromJSON a => FromJSON (List a) where
parseJSON (Object v) =
List
<$> v .: "results"
<*> v .: "count"
<*> v .:? "previous"
<*> v .:? "next"
parseJSON _ = mzero
getPrevious :: FromJSON a => List a -> Freesound (Maybe (List a))
getPrevious = maybe (return Nothing) (liftM Just . get) . previous
getNext :: FromJSON a => List a -> Freesound (Maybe (List a))
getNext = maybe (return Nothing) (liftM Just . get) . next