The Par monad from the Control.Monad.Par
package is used to speed up pure functions using parallel threads. Information flow is guided by variables called IVar
. We can put
values to IVar
in parallel or get
values from it.
Import the Par monad as follows:
import Control.Monad.Par
Run a computation in parallel, and perform some interesting function such as counting the number of digits and printing it out.
main = print $ length $ show $ runPar mypar
Define an I/O type action as follows:
mypar = do v1 <- new :: Par (IVar Integer) v2 <- new :: Par (IVar Integer) fork $ put v1 task1 fork $ put v2 task2 v1' <- get v1 v2' <- get v2 return (v1' + v2')
Perform a time-consuming task as follows:
task1 = 8^8^8
Perform another time-consuming task as follows:
task2 = 8^8^7
Compile the code with the
threaded
andrtsopts
flags enabled, using the...