module HsBot.State where import qualified Data.Map as M import List import HsBot.IRC.User data State = State { currentChannel :: String, line :: String, users :: [User] } deriving (Show, Read) stateNumUsers :: State -> Int stateNumUsers state = length $ users state stateSortedUsers :: State -> [User] stateSortedUsers state = sort $ users state stateLoad :: String -> IO State stateLoad databaseFile = do file <- readFile databaseFile return ( read file :: State ) stateSave :: String -> State -> IO () stateSave databaseFile = writeFile databaseFile . show stateSaveIO :: String -> IO State -> IO () stateSaveIO databaseFile state = do state' <- state writeFile databaseFile (show state')