{-# LANGUAGE GeneralizedNewtypeDeriving #-} -- | The Region API. -- -- This module should be imported qualified, to prevent name clashes: -- -- @ -- import NationStates -- import qualified NationStates.Region as Region -- @ -- -- In general, this module follows the terminology used in the -- . -- -- Here's a short example: -- -- @ -- import NationStates -- import qualified NationStates.Region as Region -- import Text.Printf -- -- main = do -- c <- 'NationStates.newContext' "ExampleBot/2000" -- (name, numnations, delegate) <- Region.'run' "Pony Lands" -- ((,,) \<$\> Region.'name' \<*\> Region.'numnations' \<*\> Region.'delegate') c -- printf "%s has %d nations. Its delegate is %s\\n" name numnations delegate -- @ module NationStates.Region ( -- * Running queries Region(..), run, -- * Shards name, factbook, numnations, nations, delegate, -- delegatevote, -- gavote, -- scvote, -- founder, -- power, -- flag, -- embassies, -- tags, -- happenings, -- messages, -- history, -- poll, ) where import Control.Applicative import Prelude -- GHC 7.10 import NationStates.Core -- | A request to the Region API. newtype Region a = Region { unRegion :: NS a } deriving (Functor, Applicative) -- | Perform a request to the Region API. run :: String -- ^ Region name -> Region a -- ^ Requested shards -> Context -- ^ Connection manager -> IO a run region = requestNS (Just ("region", region)) . unRegion -- | Region name. -- -- > "Pony Lands" name :: Region String name = Region $ makeNS "name" "NAME" -- | Factbook, in BBCode format. -- -- > "[b]We've got ponies, therefore your argument is invalid..." factbook :: Region String factbook = Region $ makeNS "factbook" "FACTBOOK" -- | Number of nations in the region. -- -- > 112 numnations :: Region Integer numnations = Region . fmap (expect "nation count" readMaybe) $ makeNS "numnations" "NUMNATIONS" -- | List of nations in the region. -- -- > ["urmanian","enatai","unfitting_doors","lykosia","trotterdam"] nations :: Region [String] nations = Region . fmap (wordsBy (== ':')) $ makeNS "nations" "NATIONS" -- | Region delegate. -- -- > "princess_luna" delegate :: Region String delegate = Region $ makeNS "delegate" "DELEGATE"