> difficulties in the correct design for updating shared state, in a purely functional way
can you elaborate on the right way? i think the choice to write a game in a functional language is interesting, because games are inherently about managing state, and functional languages are all about not using state.
At least Haskell orients towards shared-state concurrency, where the state is the thin layer of communication between many stateless threads, using mechanisms like transactional memory to manage the shared resource.