IO-System
Sigbjorn Finne
sof@galois.com
Mon, 16 Sep 2002 20:41:10 -0700
"Glynn Clements" <glynn.clements@virgin.net> writes:
>
> David Sabel wrote:
>
...
> >
> > Look at this small programm:
> >
> > module Main(main) where
> >
> > main = echoTwice
> >
> > echo = getChar >>= putChar
> >
> > echoTwice = echo >> echo
> >
> > while executing: the program reads first two chararcters and then it
writes
> > the characters, but
> > in my opinion it would be right to read one character, then write one
> > characater, then read, then write.
> > What's the reason for it?
>
> Buffering.
>
A deficiency of the current implementation of the IO system, I'd
say. Reading from stdin ought to force a stdout (and stderr) buffer
flush. The GHC IO libs used to do this.
This is constant source of confusion for users & turning off
buffering alltogether is a poor substitute for having the IO
system do the Right Thing under the hood.
--sigbjorn