> "Simon Marlow" <[EMAIL PROTECTED]> writes: > > To really match the C program, you need to use IOExts.hGetBuf and > > IOExts.hPutBuf, and do the operations on raw characters in memory. > > Using a UArray of Word8 would be better, but there aren't any > > operations to do IO to/from a UArray yet (actually I've written > > these, but they aren't in the tree yet). > > So why don't getContents / putStr / etc. deforest cleanly to calls to > hGetBuf and hPutBuf? I'm genuinely curious; my own experience in this > direction is "The engineering is challenging". These functions are so > commonly used, though---and they're vastly easier to use, actually > portable, etc. The effort would surely be repaid.
I think you're right, in that the engineering would be challenging. You could conceivably factor getContents into two functions getBlocks :: IO [Block] and a pure function to unpack the blocks into characters, which would lend itself to deforestation, but that would conflict with our attempts to re-use buffers when possible. But the gains might outweigh the slight performance loss from not re-using buffers as much - it's an interesting idea, anyway. Cheers, Simon _______________________________________________ Glasgow-haskell-users mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/glasgow-haskell-users