async-2.0.2: Run IO operations asynchronously and wait for their results

# async-2.0.2: Run IO operations asynchronously and wait for their results

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`).

Changes in 2.0.2:

- Add a Monad instance for Concurrently
- Bump base dependency to allow 4.9

Changes in 2.0.1.6:

- Add workaround to waitCatch for #14

Changes in 2.0.1.5:

- Bump `base` dependencies for GHC 7.8

Changes in 2.0.1.4:

- Bump `base` dependency of test suite

Changes in 2.0.1.3:

- Bump `base` dependency to allow 4.6

Changes in 2.0.1.2:

- Bump `stm` dependency to 2.4

Changes in 2.0.1.1:

- Safe Haskell support: `Control.Concurrent.Async` is now `Trustworthy`

Changes in 2.0.1.0:

- Added a `Functor` instance for `Async`
- Added `asyncBound`, `asyncOn`, `asyncWithUnmask`, `asyncOnWithUnmask`, `withAsyncBound`, `withAsyncOn`, `withAsyncWithUnmask`, `withAsyncOnWithUnmask`.
- Added `mapConcurrently`
- Added `Concurrently` (with `Applicative` and `Alternative` instances)

Modules

- Control
  - Concurrent
    - Control.Concurrent.Async