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