This section demonstrates the flexibility of evaluation strategies by showing how they express some common parallel paradigms. We cover data-oriented, divide-and-conquer, producer-consumer, and pipeline parallelism. One parallel programming paradigm that we have not expressed here is branch-and-bound parallelism. This cannot be expressed functionally, however, without using semantic non-determinism of some kind. Non-determinism is not available in Haskell, though languages such as Sisal [McGraw, 1985] provide it for precisely such a purpose, and Burton and Jackson have shown how to encapsulate the nondeterminacy in an abstract data type with deterministic semantics [Burton, 1991], and discussed a parallel implementation [Jackson and Burton, 1993]