September 2016
Intermediate to advanced
408 pages
9h 18m
English
The first abstraction we will look at is the Control.Parallel.Strategies module from the parallel package. The core Strategy API consists of the following:
data Eval a instance Monad Eval type Strategy a = a → Eval a runEval :: Eval a → a using :: a → Strategy a → a rseq :: Strategy a rdeepseq :: NFData a => Strategy a rpar :: Strategy a
The principle is to use using or runEval to evaluate a lazy data structure in parallel, using some strategy. Essentially we have separated the algorithm (a lazy data structure) from the parallel evaluation (a strategy).
As a simple example, consider calculating the minimum and maximum elements of many lists in parallel. We write an algorithm, which doesn't encode any parallelism, called ...
Read now
Unlock full access