From 49cb93e54a8fd81054f0a36760e2f5870eefc2e2 Mon Sep 17 00:00:00 2001 From: Sumit Raja Date: Mon, 30 Nov 2015 23:32:46 +1100 Subject: [PATCH] Update 2nd chater of tutorial Example does not compile. Hard for a newbie to Haskell to fix the types so this might help --- tutorials/2ch.md | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/tutorials/2ch.md b/tutorials/2ch.md index c16d302..d7fcf98 100644 --- a/tutorials/2ch.md +++ b/tutorials/2ch.md @@ -26,18 +26,23 @@ searches for a list of peer nodes, and sends a message to a registered (named) p {% highlight haskell %} import System.Environment (getArgs) import Control.Distributed.Process -import Control.Distributed.Process.Node (initRemoteTable) -import Control.Distributed.Process.Backend.SimpleLocalnet +import Control.Distributed.Process.Node (initRemoteTable, runProcess, LocalNode) +import Control.Distributed.Process.Backend.SimpleLocalnet (initializeBackend, newLocalNode, findPeers, Backend) import Control.Monad (forever, mapM_) +main :: IO() main = do [host, port] <- getArgs - backend <- initializeBackend host port initRemoteTable node <- newLocalNode backend - runProcess node $ forever $ do - findPeers backend >>= mapM_ $ \peer -> nsendRemote peer "echo-server" "hello!" + peers <- findPeers backend 1000000 + runProcess node (messagePeers peers) + +messagePeers :: [NodeId] -> Process() +messagePeers = mapM_ (\peer -> sendMessage peer "hello!") +sendMessage :: NodeId -> String -> Process() +sendMessage peer = nsendRemote peer "echo-server" {% endhighlight %} Clearly the program isn't very useful, but it illustrates the two key concepts that