Hi all, I have the following snippet of code: mutableMemoryArray <- newArray_ (0, bufferSize - 1) bytesRead <- hGetArray handle mutableMemoryArray bufferSize The problem is that hGetArray (like hGetBuf) may read less than the amount that you specify (since you may hit EOF before filling up the whole array). If this happens, the mutableMemoryArray array has a bounds which is greater than it should be. This is quite bad if, say, you hPutArray the array to another writable Handle. e.g. if bufferSize is 4096, and the input file is 4100 bytes long, the code will properly read 4096 bytes on the first pass, but only 4 bytes on the second pass; yet the bounds of the array will still be 4096 bytes in both cases, rather than 4096 and 4. You can't simply swap the two expressions since you don't know how many bytes you've read until you execute hGetArray, and you can't execute hGetArray until you allocate the array, which requires that you know the array bounds. Chicken-and-egg. Am I missing something obvious here? I'd even be happy if there was some way to adjust the bounds on a mutable array after it's been created, or even if I could use hGetBuf and somehow efficiently create an array from a (Ptr Word8). I know I could simply re- allocate another array and garbage collect the first one if bytesRead /= bufferSize, but that seems pretty inelegant. Thanks! -- % Andre Pang : trust.in.love.to.save <http://www.algorithm.com.au/>