Binary IO

Simon Marlow simonmar at microsoft.com
Fri Apr 22 08:19:51 EDT 2005


On 22 April 2005 11:35, Benjamin Franksen wrote:

> On Friday 22 April 2005 10:38, Simon Marlow wrote:
>> Lifting this constraint in GHC is a bit tricky because we currenly
>> use the OS's text<->binary translation to do I/O (doesn't matter on
>> Unix, right now).
> 
> So what? If the handle is in text mode, you won't get the exact bytes
> as they are in the file, when calling hGetWord8 (at least on some
> systems). But that is exactly what I would expect if the handle is in
> text mode. If I need the exact binary representation of a text file, I
> have to use binary, of course.

So if you open a file in text mode and read it with hGetWord8, what
bytes do you expect to get, exactly?  Perhaps each byte of the UCS-4
representation?  Big endian or little endian order?  

You could specify some meaning, but I don't think it would be a useful
interface.  And if you can't specify it precisely, it shouldn't be
there.

>> I presume that hPutWord8 (fromIntegral (ord '\n')) should not flush a
>> line-buffered Handle,
> 
> I can't see a reason not to flush it. Could you explain why you think
> it should not? What have terminal settings to do with file handle
> modes?? 

Well, I have the notion that EOL is a text concept, so doesn't belong in
binary I/O.  On the other hand, it's easy enough to specify that writing
the byte 0xa to a line-buffered binary handle has the effect of flushing
it, just as we say that writing the character '\n' to a line-buffered
text handle triggers a flush.  So I'm happy to leave things as they are.

Cheers,
	Simon


More information about the Libraries mailing list