async actions use proxy to obtain results; monitoring is performed only
in the proxy; no stray message are ever delivered to the caller's process;
async actions are described by a rich result type describing the various
observable states they may be in
documentation
export an API
cosmetic
implement waitTimeout sanely
documentation
TODO => done; strip it out
refactor
document the contract for async workers
implement waitCheckTimeout
cosmetic (ish)
add blocking wait call - document things a bit more
refactor async to use typed channels instead of MVar
tidy up and document
proof that channels are not such a good idea after all?
and then realise that the test cases are wrong
don't make the sample task block and the tests will pass
test waiting/timeouts; ensure we don't care if worker is unresponsive
update async docs to reflect contract changes
Now that we've stolen Simon's lovely API, pinch half his documentation too