How it works...

monad-par defines the Par monad which defines the following primitives:

  • new: Define a new empty IVar
  • get: Wait for having some value in IVar
  • put: Put some value into IVar
  • fork: Signal that the input Par action can be run in parallel
  • spawn: A function to run an action in parallel to produce an IVar

Internally, monad-par implements a way to balance these activities across threads by scheduling and balancing them. monad-par allows us to specify parallel tasks without getting into the nitty-gritty of actually scheduling tasks.

Also note that, in this recipe, we have used a threshold to run the task sequentially. This is to increase the granularity of the tasks. This speeds up more speedup when there is no threshold. As because ...

Get Haskell Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.