Move the game state into a separate, immutable class.
By having game state be immutable and managed as an object, more functional approaches can be taken to implementation of game.next_frame, and other higher functions.
In addition, by having more functional approaches to these functions, they can be more easily tested, as they are simply a function of input to output, and independent of state.
Where should the Game Provider be updated with the updated state?
How to remain efficient when _next_frame would create many new 'game states'?
How to make creating new 'game states' efficient, while retaining as much information as possible (e.g. retain all entities' positions at all game states, without wasting too much memory)
Move the game state into a separate, immutable class.
By having game state be immutable and managed as an object, more functional approaches can be taken to implementation of game.next_frame, and other higher functions.
In addition, by having more functional approaches to these functions, they can be more easily tested, as they are simply a function of input to output, and independent of state.