What should I use for effect handling?

Yes, GHC supports Concurrent Haskell by default. But without the multi-threaded RTS, it doesn’t work as well as people expect - see this thread for more details.

Perhaps the more important feature that would be provided is parallelism, because of the use of a certain unsafe kludge which allows:

  • an IORef to be defined at the top level;
  • the use of IO actions to be “camouflaged”.

I foresee more than a few difficulties in the future when people start using the parallel features of Haskell with definitions purporting to be free of observable effects, only to notice things no longer worked like they used to (if at all). Furthermore, it would make “helpful advice” provided in articles like this less so: