fastirc-0.1.2: Network/FastIRC/ServerSet.hs
-- |
-- Module: Network.FastIRC.ServerSet
-- Copyright: (c) 2010 Ertugrul Soeylemez
-- License: BSD3
-- Maintainer: Ertugrul Soeylemez
-- Stability: experimental
--
-- 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