
John Meacham
I was thinking of it as a better implementation of a stream interface (when available).
I'm not convinced that the stream interface (http://www.haskell.org/~simonmar/io/System.IO.html) works at all, i.e. whether it's complete, implementable and convenient. Convenience. I'm worried that it uses separate types for various kinds of streams: files, pipes, arrays (private memory), and sockets. Haskell is statically typed and lacks subsumption. This means that even though streams are unified by using a class, code which uses a stream of an unknown kind must be either polymorphic or use existential quantification. Completeness. Unless File{Input,Output}Stream uses {read,write}() rather than file{Read,Write}, openFile provides only a subset of the functionality of open(): it works only with seekable files, e.g. not with "/dev/tty". What is the type of stdin/stdout? They may be devices or pipes (not seekable), regular files (seekable), sockets... Note that even when they are regular files, emulating stream I/O in terms of either pread/pwrite or mmap does not yield the correct semantics of sharing the file pointer between processes. If we have a shell script which runs Haskell programs which write to stdout, it should be possible to redirect the output of the script as a whole.
Exploiting the advantages of mapped files for stream I/O http://www.cs.toronto.edu/pub/reports/csrg/267/267.ps
The advantage of reducing copying between buffers is lost in Haskell: file{Read,Write} use a buffer provided by the caller instead of giving a buffer for the caller to examine or fill. -- __("< Marcin Kowalczyk \__/ qrczak@knm.org.pl ^^ http://qrnik.knm.org.pl/~qrczak/