Fork me on GitHub


Haskell combinators for executing IO actions in parallel on a thread pool.


It is often useful to be able to execute a number of IO actions in parallel, and then either gather the results back up, or report completion of the actions. This package is designed to support this scenario by providing a number of high-level combinators for enabling this parallelism without any hard work on your part. Features include:


import Control.Concurrent.ParallelIO
import qualified Control.Concurrent.ParallelIO.Local as Local

main = do
  -- Example with the global pool. You should call stopGlobalPool
  -- after the last use of a global parallelism combinator - the
  -- end of the main function is a fine place.
  parallel_ [putStrLn "Hello", putStrLn "World"]
  -- Example of an explicitly sized and passed pool. Use 2 threads.
  Local.withPool 2 $ \pool -> do
    Local.parallel_ pool [putStrLn "Goodbype", putStrLn "World"]

We can run this like so to get our parallel goodness:

$ ghc -package parallel-io -threaded Example.hs -o Example
$ ./Example +RTS -N2



Install with Cabal:

$ cabal install parallel-io

Download this project in either zip or tar formats.

Clone the project with Git:

$ git clone git://

Alternatively, browse the source on GitHub


This package is heavily inspired by a thread on Haskell-Cafe. Thanks to Neil Mitchell and Bulat Ziganshin for their contributions in that thread - they form the code that this package is based on.


All enquiries can be directed to the maintainer (Max Bolingbroke) via email.