import Control.Concurrent ; import Control.Monad
main = do
let top = 1000000000 ; let threads = 4
ch <- newChan
forM [ 0 .. threads - 1 ] $ \ t -> forkIO $ do
let p = sum [ t, t+threads .. top - 1 ]
print ( t, p )
writeChan ch p
ps <- forM [ 0 .. threads - 1 ] $ \ t ->
readChan ch
print $ sum ps
-- compile: ghc --make -O2 -threaded -rtsopts Sum.hs
-- run : ./Sum +RTS -N4