Games are all about keeping the user in the 'flow'. Humans are really good at picking up on unpredictable timing.
Action games are thus fundamentally hard-real-time systems.
Action games are thus fundamentally hard-real-time systems.
One technique used for writing games to run on GC'd runtimes is to avoid allocations entirely in the game loop. With a lot of work, you can preallocate everything you're going to need and just modify it as you run.
This technique is not a good match for Haskell's primary design principle of avoiding mutable state.
If your game has real time dynamics, it's not worth it. If it's some turn-based one without animation, it's not a problem.