@@ -217,7 +217,11 @@ readArrayUpto size (Handle fd) = do
217 -- ptr <- mallocPlainForeignPtrAlignedBytes size (alignment (undefined :: Word8))
217 -- ptr <- mallocPlainForeignPtrAlignedBytes size (alignment (undefined :: Word8))
218 withForeignPtr ptr $ \p -> do
218 withForeignPtr ptr $ \p -> do
219 -- n <- hGetBufSome h p size
219 -- n <- hGetBufSome h p size
220+#if MIN_VERSION_base(4,15,0)
221+ n <- RawIO.read fd p 0 size
220 n <- RawIO.read fd p size
223 n <- RawIO.read fd p size
221 -- XXX shrink only if the diff is significant
225 -- XXX shrink only if the diff is significant
222 -- Use unsafeFreezeWithShrink
226 -- Use unsafeFreezeWithShrink
@@ -235,7 +239,11 @@ writeArray :: Storable a => Handle -> Array a -> IO ()
235writeArray _ arr | A.length arr == 0 = return ()
239writeArray _ arr | A.length arr == 0 = return ()
236writeArray (Handle fd) arr = withForeignPtr (aStart arr) $ \p ->
240writeArray (Handle fd) arr = withForeignPtr (aStart arr) $ \p ->
237 -- RawIO.writeAll fd (castPtr p) aLen
241 -- RawIO.writeAll fd (castPtr p) aLen
242+#if MIN_VERSION_base(4,15,0)
243+ RawIO.write fd (castPtr p) 0 aLen
238 RawIO.write fd (castPtr p) aLen
245 RawIO.write fd (castPtr p) aLen
240 -- Experiment to compare "writev" based IO with "write" based IO.
248 -- Experiment to compare "writev" based IO with "write" based IO.
241 iov <- A.newArray 1
249 iov <- A.newArray 1