On 9 Feb 2008, at 2:29 pm, Philip Weaver wrote:

GHC certain *could* do this, but it's arguably not the right thing to do.


I have reminded the GHC maintainers before that the Haskell specification *REQUIRES* a Haskell system to support this; there is an example that makes no sense whatever without it. (And the other Haskell systems I use get it
right.)

I note that David Bacon's SETL implementation has explicit support for
tying an input stream and an output stream together so that any time input
is done on the input stream the output stream is flushed; this is done
automatically for sockets and is *seriously* useful in avoiding mistakes.

Note that this should make essentially no difference to performance because (a) the flushing is only needed when the input buffer is exhausted, which
    happens once per line,
(b) the kinds of streams where you want it (terminals, STREAMs, sockets,
    serial ports, &c) generally have other costs so high you won't be
    able to measure this one,
(c) it *only* applies to bidirectional streams or to explicitly coupled
    streams, so I/O to disc files or memory sticks or other high speed
block devices should never be affected at all (unless someone chooses to do it explicitly, in which case it's still going to be faster than
    anything they could have done by hand).


_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to