Taken from https://raw.githubusercontent.com/archlinux/svntogit-community/packages/haskell-bytestring-handle/trunk/ghc9.patch --- bytestring-handle-0.1.0.6/src/Data/ByteString/Handle/Write.hs.orig 2021-06-21 14:54:12.217134401 +0800 +++ bytestring-handle-0.1.0.6/src/Data/ByteString/Handle/Write.hs 2021-06-21 15:24:01.794796505 +0800 @@ -17,7 +17,7 @@ import GHC.IO.Buffer ( BufferState(..), emptyBuffer, Buffer(..) ) import GHC.IO.BufferedIO ( BufferedIO(..) ) -import GHC.IO.Device ( IODevice(..), IODeviceType(..), SeekMode(..) ) +import GHC.IO.Device ( IODevice(..), IODeviceType(..), SeekMode(..), RawIO(..) ) #if MIN_VERSION_base(4,5,0) import GHC.IO.Encoding ( getLocaleEncoding ) #else @@ -138,6 +138,7 @@ seek_base = error "seek_base needs to be updated" }) modifyIORef (write_size ws) (`max` newSeekPos) + pure newSeekPos tell ws = do ss <- readIORef (write_seek_state ws) @@ -152,6 +153,12 @@ devType _ = return RegularFile -- TODO: is this correct? +instance RawIO WriteState where + read _ _ _ _ = return 0 + readNonBlocking _ _ _ _ = return Nothing + write _ _ _ _ = return () + writeNonBlocking _ _ _ _ = return 0 + ioe_seekOutOfRange :: IO a ioe_seekOutOfRange = ioException $ IOError Nothing InvalidArgument "" --- bytestring-handle-0.1.0.6/src/Data/ByteString/Handle/Read.hs.orig 2021-06-21 14:53:55.433129276 +0800 +++ bytestring-handle-0.1.0.6/src/Data/ByteString/Handle/Read.hs 2021-06-21 15:24:25.998784996 +0800 @@ -24,7 +24,7 @@ , emptyBuffer, isEmptyBuffer, newBuffer, newByteBuffer , bufferElems, withBuffer, withRawBuffer ) import GHC.IO.BufferedIO ( BufferedIO(..) ) -import GHC.IO.Device ( IODevice(..), IODeviceType(..), SeekMode(..) ) +import GHC.IO.Device ( IODevice(..), IODeviceType(..), SeekMode(..), RawIO(..) ) #if MIN_VERSION_base(4,5,0) import GHC.IO.Encoding ( getLocaleEncoding ) #else @@ -155,7 +155,7 @@ (seek_before_length curSeekState) (fromIntegral (seek_pos curSeekState) + seekPos) SeekFromEnd -> normalisedSeekState (read_chunks_backwards rs) [] (read_length rs) seekPos - maybe ioe_seekOutOfRange (writeIORef (read_seek_state rs)) newSeekState + maybe ioe_seekOutOfRange (\nss -> writeIORef (read_seek_state rs) nss >> pure (fromIntegral(seek_pos nss))) newSeekState tell rs = do ss <- readIORef (read_seek_state rs) @@ -166,6 +166,12 @@ devType _ = return RegularFile -- TODO: is this correct? +instance RawIO ReadState where + read _ _ _ _ = return 0 + readNonBlocking _ _ _ _ = return Nothing + write _ _ _ _ = return () + writeNonBlocking _ _ _ _ = return 0 + ioe_seekOutOfRange :: IO a ioe_seekOutOfRange = ioException $ IOError Nothing InvalidArgument ""