A.J. Bonnema wrote: > I used kdevelop to enter and compile the following code (Haskell): > > module Main where > > main = do putStr "naam invoerbestand?" > inf <- getLine > txt <- readFile inf > putStr "naam uitvoerbestand?" > outf <- getLine > writeFile outf txt > > When executed I have to enter the first filename, then the second > filename and finally the questions are both asked in one go and the > program ends. > This also happens if I executed the generated binary from an term. > > However, using hugs, I get the first question first, enter the filename, > then I get the second question, I enter the filename and then the > program ends. > > Why doesn't kdevelop generate code, that executes the statements in > order? Or should I be looking at ghc? Or is it an option I am missing?
As others have pointed out, the issue is the buffering. However, there is another issue which seems to have been overlooked: you aren't writing newlines, so the stream won't be flushed automatically even in the stream is line-buffered. If you use putStrLn instead of putStr, the stream will be flushed automatically (assuming that it is line-buffered, which is the default if the stream is associated with a terminal). If you don't want to add a newline, add explicit hFlush calls, i.e.: putStr "naam invoerbestand?" hFlush stdout inf <- getLine In C, you don't need to use fflush() in this situation because, when a read from a line-buffered input stream cannot be fulfilled from the buffer (i.e. the stdio code has to read() from the underlying descriptor), all line-buffered output streams are flushed automatically. The Haskell I/O library doesn't mimic this aspect of C, so you have to add explicit hFlush calls if you want partial lines (strings which don't end with a newline character) to be displayed immediately. -- Glynn Clements <[EMAIL PROTECTED]> _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell