[Haskell-cafe] Re: What Functions are Standard?

Glynn Clements glynn.clements at virgin.net
Wed Oct 6 11:55:28 EDT 2004


Malcolm Wallace wrote:

> > > I can't comment on nhc98, but the Haskell98 standard doesn't include
> > > any mechanism for binary I/O.
> > 
> > Ouch.  That seems like a major oversight to me.  Will there be any
> > effort to fix that in the future?
> 
> Note that, on Unix-like systems, there is no difference between
> text I/O and binary I/O on files.  It is only Windows that requires
> a separation of the modes.

There are two issues here.

The first is EOL conversion; as Malcom notes, this isn't an issue on
Unix, but it is an issue on Windows. On Windows, there is no standard
way to obtain the contents of a file such that \n and \r\n are
distinct.

The second is character encoding/decoding. The Haskell98 I/O functions
all deal with Chars. When reading a file, the byte stream is converted
to a list of characters using an *unspecified* encoding. AFAIK, all
implementations are currently hardcoded to assume ISO-8859-1, so you
can reliably obtain the original list of bytes using the ord function.

However, nothing in the standard dictates that ISO-8859-1 is used, and
there has been talk of using the locale's encoding instead. If that
were to happen, it would be practically (as well as theoretically)
impossible to perform binary I/O using the Haskell98 API, even on
Unix.

This issue has been beaten to death fairly recently, so I'm not going
to repeat it here. See the thread entitled "Writing binary files" from
Sep 11-18 for the details.

-- 
Glynn Clements <glynn.clements at virgin.net>


More information about the Haskell-Cafe mailing list