-- {-# LANGUAGE MultiParamTypeClasses #-} -- {-# LANGUAGE FunctionalDependencies #-} -- {-# LANGUAGE FlexibleInstances #-} -- {-# LANGUAGE NoMonomorphismRestriction #-} module HsBot.Base.State where import qualified Data.Map as M import List import HsBot.IRC.User data State = State { isReady :: Bool, currentSender :: String, currentChannel :: String, line :: String, users :: [User] } deriving (Show, Read) makeDefaultState :: State makeDefaultState = State { isReady = False, currentSender = "", currentChannel = "", line = "", users = [] } 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')