Binary IO

John Meacham john at repetae.net
Thu Apr 21 06:16:18 EDT 2005


On Thu, Apr 21, 2005 at 10:32:59AM +0100, Simon Marlow wrote:
> On 20 April 2005 22:35, Scott Turner wrote:
> 
> > On 2005 April 20 Wednesday 15:56, Iavor Diatchki wrote:
> >> I've been playing around with decoding binary files, and I couldn't
> >> find a function in the libraries to read a byte from a file. Does
> >> anyone know if there is such a function?  ....... it seems
> >> that we should have:
> >> hGetByte :: Handle -> IO Word8
> > 
> > hGetByte could be implemented on top of hGetBuf and StorableArray,
> > but the overhead would be ugly.  Recently I needed binary input for
> > similar reasons, and would have used hGetByte had it been available. 
> > I ended up performing input using a reasonable-sized buffer.
> 
> In GHC, you can assume that 
> 
>   hGetByte h = do c <- hGetChar h; return (fromIntegral (ord c))
> 
> you must open the file in binary mode (openBinaryFile).  I don't think
> this works with Hugs, though.
> 
> Personally, I think this ought to be part of the redesign of the I/O
> library.  hGetByte and hPutByte would be a stopgap.  But, not much
> progress is being made on an I/O redesign right now.

but a useful stopgap, because their use would guarentee your code
wouldn't suddenly stop working when ghc changes its IO system.

I'd like to see all of:
readBinaryFile :: String -> IO [Word8]
writeBinaryFile :: String -> [Word8] -> IO ()
hGetByte :: Handle -> IO Word8
hPutByte :: Handle -> Word8 -> IO ()

added to all the compilers. simply so there is a straightforward (if
not ideal) portable way to do binary IO. We can worry about the ideal pecfect low
level interface later.

        John



-- 
John Meacham - ⑆repetae.net⑆john⑈ 


More information about the Libraries mailing list