<div dir="ltr">Hello,<div><br></div><div>I seem to have somehow conflated the use of the state variable form !X with the use of the modes "di" and "uo" because so far the the only place I have used such notation has been with the special !IO state variable.</div><div><br></div><div>I now have a game loop:</div><div><br></div><div><font face="monospace"><b>:- pred game_loop(<br>    app_state::di,  app_state::uo,<br>    game_state::di, game_state::uo,<br>    io::di,         io::uo)<br>is det.<br><br>game_loop(!AppState, !GameState, !IO) :-</b></font></div><div><font face="monospace"><b>     :</b></font></div><div><font face="monospace"><b>     : game state and app state code...</b></font></div><div><font face="monospace"><b>     :<br>    game_loop(!AppState, !GameState, !IO).</b></font><br></div><div><br></div><div>This is condensed for clarity(!) but have I understood the concepts correctly. My intention is that after one pass of the game loop the "old" (di) application and game states can be junked i.e. their memory deallocated as the new incarnations are now the current ones, ready for the tail-cail back into the next iteration of the game loop.</div><div><br></div><div>Is that the correct use case?</div><div><br></div><div>The game state will contain all the mutable stuff for the game and the application state is slightly higher level stuff like "should I terminate" etc.</div><div><br></div><div>Thanks</div><div>Sean.</div><div><br></div></div>