Multiple-core processors are now the norm and functional programming languages are well-matched for use in writing software to take advantage of multi-core environments.

Simon Peyton Jones and Satnam Singh of Microsoft Research Cambridge have authored A Tutorial on Parallel and Concurrent Programming in Haskell on using the functional programming language Haskell for writing parallel and concurrent programs. The authors have created a practical tutorial to introduce programmers familiar with Haskell to the language's inherent features for parallel programming. Among the topics explored are:

Using annotations to write semi-explicit parallel programs (and to control granularity).

Mechanisms for using transactional memory to share information between threads.

Using nested data parallelism to create rich data types (that can automatically be transformed for efficient execution on multi-core processors.

The authors point out that the rise of multi-core processors has renewed interest in parallel functional programming and spurred many projects that explore the advantages of using a functional language, such as Haskell, for writing parallel code. And while they note that writing concurrent and parallel programs is more challenging than writing sequential programs, the benefits of undertaking this difficult task can include exponentially increased performance, the ability to hide the latency of slow I/O operations, and being able to modularly structure code. Besides, they also note that all new mainstream microprocessors have at least two cores and it is only a matter of time before tens or hundreds of cores are introduced. And Peyton Jones and Singh argue, "We can not expect the performance of each individual core to improve much further. The only way to achieve increasing performance from each new generation of chips is by dividing the work of a program across multiple processing cores." Which is where writing parallel Haskell programs can be useful.