While tinkering on a project, I frequently found myself
wanting to wait for an IO operation unless something
more important came up. The Control.Concurrent.STM.OrElseIO
module is meant to reduce the boilerplate needed when choosing
between IO actions and STM operations.
You must use the threaded runtime with this package.
TODO:
Kill off IO threads whose return values will never be needed.
Possibly rename runOrElse and friends to orElseIO or similar.