blob: cf2db1f8b65960ea775415e6c53ffe4437d31c53 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
import Control.Monad.Writer
import Control.Monad.State
import Data.Tuple.Extra (dupe,first,second)
import System.Environment (getArgs)
import Control.Parallel.Strategies (parMap,rseq,rdeepseq)
main = do
mainMonTra
mainParMap
-- monad transformers in action
mainMonTra = print $
runState (
runWriterT (
get >>= \a ->
tell ["foo"] >>
put (a*a) >>
tell ["bar"] >>
tell [show a]
)
) 5
-- parallel Map arguments: sparks maps
mainParMap = do
(sparks:max:_) <- fmap (map read) getArgs
let ranges = uncurry zip . second tail . dupe $ [0,(max`div`sparks)..max]
let sums = parMap rdeepseq (\(a,b)->sum [a+1..b]) ranges
print $ show (sum sums::Integer)
|