This paper has introduced evaluation strategies, a new mechanism for controlling the parallel evaluation of non-strict functional languages. We have shown how lazy evaluation can be exploited to define evaluation strategies in a way that cleanly separates algorithmic and behavioural concerns. As we have demonstrated, the result is a very general, and expressive system: many common parallel programming paradigms can be captured. Finally, we have also outlined the use of strategies in three large parallel applications, noting how they facilitate the top-down parallelisation of existing code. Preliminary results indicate that acceptable parallelism is attained with relatively little programming effort.