However, I'm not sure if Ncurses doesn't mind calling getEvent from a different thread than the one that updates UI.
I don't know if the Haskell bindings change this, but at the C level as long as automatic echo to a window is turned off, it should be safe to do reads from one thread and writes from another.