content: -- |
  -- Module:     Network.FastIRC.ServerSet
  -- Copyright:  (c) 2010 Ertugrul Soeylemez
  -- License:    BSD3
  -- Maintainer: Ertugrul Soeylemez <es@ertes.de>
  -- Stability:  alpha
  --
  -- Functions for dealing with sets of IRC servers.  Note that servers
  -- are compared case-insensitively.
  
  module Network.FastIRC.ServerSet
    ( -- * The server set type
      ServerSet,
  
      -- * Manipulation
      addServer,
      delServer,
      emptyServers,
      isServer,
  
      -- * Conversion
      serversFromList,
      serversToList
    )
    where
  
  import qualified Data.ByteString.Char8 as B
  import qualified Data.Set as S
  import Data.Char
  import Network.FastIRC.Types
  
  
  -- | A set of servers.  This data type uses 'S.Set' internally, but
  -- the strings are handled case-insensitively.
  
  newtype ServerSet = ServerSet (S.Set ServerName)
  
  
  -- | Empty set of servers.
  
  emptyServers :: ServerSet
  emptyServers = ServerSet S.empty
  
  
  -- | Add a server to a 'ServerSet'.
  
  addServer :: ServerName -> ServerSet -> ServerSet
  addServer s (ServerSet ss) = ServerSet $ S.insert (B.map toLower s) ss
  
  
  -- | Remove a server from a 'ServerSet'.
  
  delServer :: ServerName -> ServerSet -> ServerSet
  delServer s (ServerSet ss) = ServerSet $ S.delete (B.map toLower s) ss
  
  
  -- | Check whether specified server is in the set.
  
  isServer :: ServerName -> ServerSet -> Bool
  isServer s (ServerSet ss) = S.member (B.map toLower s) ss
  
  
  -- | Build from list.
  
  serversFromList :: [ServerName] -> ServerSet
  serversFromList = ServerSet . S.fromList
  
  
  -- | Convert to list.
  
  serversToList :: ServerSet -> [ServerName]
  serversToList (ServerSet ss) = S.toList ss
  