RWH Ch. 27 TCP Server Example

Hi all, I am trying to understand the TCP Syslog Server example [1] from RWH. Specifically my question is on this piece of code: -- | Process incoming messages procMessages :: MVar () -> Socket -> SockAddr -> IO () procMessages lock connsock clientaddr = do connhdl <- socketToHandle connsock ReadMode hSetBuffering connhdl LineBuffering messages <- hGetContents connhdl mapM_ (handle lock clientaddr) (lines messages) hClose connhdl handle lock clientaddr "syslogtcpserver.hs: client disconnected" How does control stay on "mapM_ (handle lock clientaddr) (lines messages)" ? It would seem that the server would handle one message and immediately close the handle and end - but it doesn't. I'm guessing this has something to do with laziness, but I don't see how to apply it. thanks .. -deech [1] http://book.realworldhaskell.org/read/sockets-and-syslog.html

2009/4/14 aditya siram
Hi all, I am trying to understand the TCP Syslog Server example [1] from RWH. Specifically my question is on this piece of code: -- | Process incoming messages procMessages :: MVar () -> Socket -> SockAddr -> IO () procMessages lock connsock clientaddr = do connhdl <- socketToHandle connsock ReadMode hSetBuffering connhdl LineBuffering messages <- hGetContents connhdl mapM_ (handle lock clientaddr) (lines messages) hClose connhdl handle lock clientaddr "syslogtcpserver.hs: client disconnected"
How does control stay on "mapM_ (handle lock clientaddr) (lines messages)" ? It would seem that the server would handle one message and immediately close the handle and end - but it doesn't. I'm guessing this has something to do with laziness, but I don't see how to apply it.
I think you are right thinking about laziness. The function hGetContents produces a lazy result (messages), therefore any function that consumes messages could be considered as 'iteratively calling' hGetContents to get new elements of messages ... Laziness is a Very Cool Feature ... when it does not bite you with thunk accumulation problems :-) Ciao ------ FB
thanks .. -deech
[1] http://book.realworldhaskell.org/read/sockets-and-syslog.html _______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
participants (2)
-
aditya siram
-
Francesco Bochicchio