Run IO operations asynchronously and wait for their results
Description
This package provides a higher-level interface over threads, in which an
'Async a' is a concurrent thread that will eventually deliver a value of
type 'a'. The package provides ways to create "Async" computations,
wait for their results, and cancel them.
Using 'Async' is safer than using threads in two ways:
* When waiting for a thread to return a result, if the thread dies with an
exception then the caller must either re-throw the exception ('wait') or handle
it ('waitCatch'); the exception cannot be ignored.
* The API makes it possible to build a tree of threads that are automatically
killed when their parent dies (see 'withAsync').