The structure of this paper is as follows. Section 2 is a brief historical overview. Section 3 considers the main ways in which parallelism can be exploited in functional languages. Section 4 considers implementation issues, including load management, communication, speculation and memory management. Section 5 considers related research into concurrency, non-determinism, dataflow programming, functional-logic programming, term-graph rewriting and parallel execution of impure functional languages. Section 6 considers future research directions. Finally, Section 7 suggests some possibilities for further reading.