[Haskell-beginners] RWH Ch. 27 TCP Server Example
bieffe62 at gmail.com
Tue Apr 14 23:41:06 EDT 2009
2009/4/14 aditya siram <aditya.siram at gmail.com>
> Hi all,
> I am trying to understand the TCP Syslog Server example  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
Laziness is a Very Cool Feature ... when it does not bite you with thunk
accumulation problems :-)
> thanks ..
>  http://book.realworldhaskell.org/read/sockets-and-syslog.html
> Beginners mailing list
> Beginners at haskell.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Beginners