better split out record and sum types
GameState, Event, fixed point
recursion is a reward in itself