Parallel Evaluation Strategies, or Strategies for short, provide ways
to express parallel computations. Strategies have the following key
features:

- Strategies express
*deterministic parallelism*: the result of the program is unaffected by evaluating in parallel. The parallel tasks evaluated by a Strategy may have no side effects. For non-deterministic parallel programming, see Control.Concurrent. - Strategies let you separate the description of the parallelism from the logic of your program, enabling modular parallelism. The basic idea is to build a lazy data structure representing the computation, and then write a Strategy that describes how to traverse the data structure and evaluate components of it sequentially or in parallel.
- Strategies are
*compositional*: larger strategies can be built by gluing together smaller ones. - Monad and Applicative instances are provided, for quickly building strategies that involve traversing structures in a regular way.