-- | -- 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 serverList, serversFromList ) where import qualified Data.ByteString.Char8 as B import qualified Data.Set as S import Data.Char -- | A set of servers. This data type uses 'S.Set' internally, but -- the strings are handled case-insensitively. newtype ServerSet = ServerSet (S.Set B.ByteString) -- | Empty set of servers. emptyServers :: ServerSet emptyServers = ServerSet S.empty -- | Add a server to a 'ServerSet'. addServer :: B.ByteString -> ServerSet -> ServerSet addServer s (ServerSet ss) = ServerSet $ S.insert (B.map toLower s) ss -- | Remove a server from a 'ServerSet'. delServer :: B.ByteString -> ServerSet -> ServerSet delServer s (ServerSet ss) = ServerSet $ S.delete (B.map toLower s) ss -- | Check whether specified server is in the set. isServer :: B.ByteString -> ServerSet -> Bool isServer s (ServerSet ss) = S.member (B.map toLower s) ss -- | Convert to list. serverList :: ServerSet -> [B.ByteString] serverList (ServerSet ss) = S.toList ss -- | Build from list. serversFromList :: [B.ByteString] -> ServerSet serversFromList = ServerSet . S.fromList