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