@@ -22,6 +22,16 @@ slave (master, workQueue) = do
2222
2323remotable ['slave]
2424
25+-- | Wait for n integers and sum them all up
26+sumIntegers :: Int -> Process Integer
27+sumIntegers = go 0
28+ where
29+ go :: Integer -> Int -> Process Integer
30+ go !acc 0 = return acc
31+ go !acc n = do
32+ m <- expect
33+ go (acc + m) (n - 1)
34+
2535master :: Integer -> [NodeId] -> Process Integer
2636master n slaves = do
2737 us <- getSelfPid
@@ -41,7 +51,4 @@ master n slaves = do
4151 forM_ slaves $ \nid -> spawn nid ($(mkClosure 'slave) (us, workQueue))
4252
4353 -- Wait for the result
44− partials <- replicateM (fromIntegral n) (expect :: Process Integer)
45−
46− -- And return the sum
47− return (sum partials)
54+ sumIntegers (fromIntegral n)