Hi Chul-Woong,

Deepseq package can be used to make sure a list is actually fully constructed before it's used.

import System.IO
import Control.DeepSeq
main :: IO ()
main = do
    s <- getContents
    s `deepseq` hClose stdin
    putStrLn "ECHO result"
    putStr s

Cheers


2014-07-24 9:07 GMT+03:00 양철웅 <cwyang@aranetworks.com>:
Hi, all.

Haskell's lazy IO causes below program to 
write back "ECHO result" to the user 
even if he doesn't give any input to the program.

test1 :: IO ()
test1 = do
  l <- fmap lines getContents
  putStrLn "ECHO result"
  putStr $ unlines l

If the client logic, that is the part for feeding data to this program
and wait for the response, expect the server logic to respond
only after all the client's request data are feed to the server logic,
the behaviour could be problematic.

I'm now writing simple web server, as you might guess, and
my web server responds "HTTP/1.1" before any client's request
are given. I'm using hGetContents and web server's logic is
basically same with above code skeleton.

How can I tell the program to respond data only after all the
requests are feed? Any directions are welcomed.
Thanks.

Chul-Woong


_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://www.haskell.org/mailman/listinfo/beginners