
Hi Courtney, On Fri, Jan 03, 2014 at 04:45:08PM +0000, Courtney Robinson wrote:
I currently can't wrap my head around how to maintain this state. How would a more experienced Haskeller approach this problem?
I think that it mostly boils down how your application loop should look like or which implementation options you have. If you're able to poll the received data, then you might just have something like: appLoop :: AppState -> IO () appLoop appState = do appState' <- pollData appState appLoop appState' You're reading the received data and modifying your state and then recursive call appLoop. If you want or have to use callbacks, then one option is to put your application state into an IORef (a mutable variable), which is shared by your application loop and your callback code e.g.: main :: IO () main = do appRef <- newIORef AppState { ... } setWhateverCallback $ \receivedData -> modifyIORef appRef $ \appData -> -- modify your appData by receivedData appLoop appRef appLoop :: IORef AppState -> IO () appLoop appRef = do modifyIORef appRef $ \appData -> -- do whatever you want with your appData appLoop appRef If you're using multiple threads, then you might want to use a MVar instead of an IORef. Greetings, Daniel