{-# LANGUAGE Trustworthy #-}{-# LANGUAGE NoImplicitPrelude , BangPatterns , NondecreasingIndentation #-}{-# OPTIONS_GHC -funbox-strict-fields #-}------------------------------------------------------------------------------- |-- Module : GHC.IO.Encoding.Latin1-- Copyright : (c) The University of Glasgow, 2009-- License : see libraries/base/LICENSE-- -- Maintainer : libraries@haskell.org-- Stability : internal-- Portability : non-portable---- Single-byte encodings that map directly to Unicode code points.---- Portions Copyright : (c) Tom Harper 2008-2009,-- (c) Bryan O'Sullivan 2009,-- (c) Duncan Coutts 2009-------------------------------------------------------------------------------moduleGHC.IO.Encoding.Latin1(latin1 ,mkLatin1 ,latin1_checked ,mkLatin1_checked ,ascii ,mkAscii ,latin1_decode ,ascii_decode ,latin1_encode ,latin1_checked_encode ,ascii_encode ,)whereimportGHC.Base importGHC.Real importGHC.Num -- import GHC.IOimportGHC.IO.Buffer importGHC.IO.Encoding.Failure importGHC.IO.Encoding.Types -- ------------------------------------------------------------------------------- Latin1latin1 ::TextEncoding latin1 :: TextEncoding latin1 =CodingFailureMode -> TextEncoding mkLatin1 CodingFailureMode ErrorOnCodingFailure -- | @since 4.4.0.0mkLatin1 ::CodingFailureMode ->TextEncoding mkLatin1 :: CodingFailureMode -> TextEncoding mkLatin1 cfm :: CodingFailureMode cfm =TextEncoding :: forall dstate estate. String -> IO (TextDecoder dstate) -> IO (TextEncoder estate) -> TextEncoding TextEncoding {textEncodingName :: String textEncodingName ="ISO-8859-1",mkTextDecoder :: IO (TextDecoder ()) mkTextDecoder =CodingFailureMode -> IO (TextDecoder ()) latin1_DF CodingFailureMode cfm ,mkTextEncoder :: IO (TextEncoder ()) mkTextEncoder =CodingFailureMode -> IO (TextEncoder ()) latin1_EF CodingFailureMode cfm }latin1_DF ::CodingFailureMode ->IO(TextDecoder ())latin1_DF :: CodingFailureMode -> IO (TextDecoder ()) latin1_DF cfm :: CodingFailureMode cfm =TextDecoder () -> IO (TextDecoder ()) forall (m :: * -> *) a. Monad m => a -> m a return (BufferCodec :: forall from to state. CodeBuffer from to -> (Buffer from -> Buffer to -> IO (Buffer from, Buffer to)) -> IO () -> IO state -> (state -> IO ()) -> BufferCodec from to state BufferCodec {encode :: CodeBuffer Word8 Char encode =CodeBuffer Word8 Char latin1_decode ,recover :: Buffer Word8 -> Buffer Char -> IO (Buffer Word8, Buffer Char) recover =CodingFailureMode -> Buffer Word8 -> Buffer Char -> IO (Buffer Word8, Buffer Char) recoverDecode CodingFailureMode cfm ,close :: IO () close =() -> IO () forall (m :: * -> *) a. Monad m => a -> m a return (),getState :: IO () getState =() -> IO () forall (m :: * -> *) a. Monad m => a -> m a return (),setState :: () -> IO () setState =IO () -> () -> IO () forall a b. a -> b -> a const (IO () -> () -> IO ()) -> IO () -> () -> IO () forall a b. (a -> b) -> a -> b $ () -> IO () forall (m :: * -> *) a. Monad m => a -> m a return ()})latin1_EF ::CodingFailureMode ->IO(TextEncoder ())latin1_EF :: CodingFailureMode -> IO (TextEncoder ()) latin1_EF cfm :: CodingFailureMode cfm =TextEncoder () -> IO (TextEncoder ()) forall (m :: * -> *) a. Monad m => a -> m a return (BufferCodec :: forall from to state. CodeBuffer from to -> (Buffer from -> Buffer to -> IO (Buffer from, Buffer to)) -> IO () -> IO state -> (state -> IO ()) -> BufferCodec from to state BufferCodec {encode :: CodeBuffer Char Word8 encode =CodeBuffer Char Word8 latin1_encode ,recover :: Buffer Char -> Buffer Word8 -> IO (Buffer Char, Buffer Word8) recover =CodingFailureMode -> Buffer Char -> Buffer Word8 -> IO (Buffer Char, Buffer Word8) recoverEncode CodingFailureMode cfm ,close :: IO () close =() -> IO () forall (m :: * -> *) a. Monad m => a -> m a return (),getState :: IO () getState =() -> IO () forall (m :: * -> *) a. Monad m => a -> m a return (),setState :: () -> IO () setState =IO () -> () -> IO () forall a b. a -> b -> a const (IO () -> () -> IO ()) -> IO () -> () -> IO () forall a b. (a -> b) -> a -> b $ () -> IO () forall (m :: * -> *) a. Monad m => a -> m a return ()})latin1_checked ::TextEncoding latin1_checked :: TextEncoding latin1_checked =CodingFailureMode -> TextEncoding mkLatin1_checked CodingFailureMode ErrorOnCodingFailure -- | @since 4.4.0.0mkLatin1_checked ::CodingFailureMode ->TextEncoding mkLatin1_checked :: CodingFailureMode -> TextEncoding mkLatin1_checked cfm :: CodingFailureMode cfm =TextEncoding :: forall dstate estate. String -> IO (TextDecoder dstate) -> IO (TextEncoder estate) -> TextEncoding TextEncoding {textEncodingName :: String textEncodingName ="ISO-8859-1",mkTextDecoder :: IO (TextDecoder ()) mkTextDecoder =CodingFailureMode -> IO (TextDecoder ()) latin1_DF CodingFailureMode cfm ,mkTextEncoder :: IO (TextEncoder ()) mkTextEncoder =CodingFailureMode -> IO (TextEncoder ()) latin1_checked_EF CodingFailureMode cfm }latin1_checked_EF ::CodingFailureMode ->IO(TextEncoder ())latin1_checked_EF :: CodingFailureMode -> IO (TextEncoder ()) latin1_checked_EF cfm :: CodingFailureMode cfm =TextEncoder () -> IO (TextEncoder ()) forall (m :: * -> *) a. Monad m => a -> m a return (BufferCodec :: forall from to state. CodeBuffer from to -> (Buffer from -> Buffer to -> IO (Buffer from, Buffer to)) -> IO () -> IO state -> (state -> IO ()) -> BufferCodec from to state BufferCodec {encode :: CodeBuffer Char Word8 encode =CodeBuffer Char Word8 latin1_checked_encode ,recover :: Buffer Char -> Buffer Word8 -> IO (Buffer Char, Buffer Word8) recover =CodingFailureMode -> Buffer Char -> Buffer Word8 -> IO (Buffer Char, Buffer Word8) recoverEncode CodingFailureMode cfm ,close :: IO () close =() -> IO () forall (m :: * -> *) a. Monad m => a -> m a return (),getState :: IO () getState =() -> IO () forall (m :: * -> *) a. Monad m => a -> m a return (),setState :: () -> IO () setState =IO () -> () -> IO () forall a b. a -> b -> a const (IO () -> () -> IO ()) -> IO () -> () -> IO () forall a b. (a -> b) -> a -> b $ () -> IO () forall (m :: * -> *) a. Monad m => a -> m a return ()})-- ------------------------------------------------------------------------------- ASCII-- | @since 4.9.0.0ascii ::TextEncoding ascii :: TextEncoding ascii =CodingFailureMode -> TextEncoding mkAscii CodingFailureMode ErrorOnCodingFailure -- | @since 4.9.0.0mkAscii ::CodingFailureMode ->TextEncoding mkAscii :: CodingFailureMode -> TextEncoding mkAscii cfm :: CodingFailureMode cfm =TextEncoding :: forall dstate estate. String -> IO (TextDecoder dstate) -> IO (TextEncoder estate) -> TextEncoding TextEncoding {textEncodingName :: String textEncodingName ="ASCII",mkTextDecoder :: IO (TextDecoder ()) mkTextDecoder =CodingFailureMode -> IO (TextDecoder ()) ascii_DF CodingFailureMode cfm ,mkTextEncoder :: IO (TextEncoder ()) mkTextEncoder =CodingFailureMode -> IO (TextEncoder ()) ascii_EF CodingFailureMode cfm }ascii_DF ::CodingFailureMode ->IO(TextDecoder ())ascii_DF :: CodingFailureMode -> IO (TextDecoder ()) ascii_DF cfm :: CodingFailureMode cfm =TextDecoder () -> IO (TextDecoder ()) forall (m :: * -> *) a. Monad m => a -> m a return (BufferCodec :: forall from to state. CodeBuffer from to -> (Buffer from -> Buffer to -> IO (Buffer from, Buffer to)) -> IO () -> IO state -> (state -> IO ()) -> BufferCodec from to state BufferCodec {encode :: CodeBuffer Word8 Char encode =CodeBuffer Word8 Char ascii_decode ,recover :: Buffer Word8 -> Buffer Char -> IO (Buffer Word8, Buffer Char) recover =CodingFailureMode -> Buffer Word8 -> Buffer Char -> IO (Buffer Word8, Buffer Char) recoverDecode CodingFailureMode cfm ,close :: IO () close =() -> IO () forall (m :: * -> *) a. Monad m => a -> m a return (),getState :: IO () getState =() -> IO () forall (m :: * -> *) a. Monad m => a -> m a return (),setState :: () -> IO () setState =IO () -> () -> IO () forall a b. a -> b -> a const (IO () -> () -> IO ()) -> IO () -> () -> IO () forall a b. (a -> b) -> a -> b $ () -> IO () forall (m :: * -> *) a. Monad m => a -> m a return ()})ascii_EF ::CodingFailureMode ->IO(TextEncoder ())ascii_EF :: CodingFailureMode -> IO (TextEncoder ()) ascii_EF cfm :: CodingFailureMode cfm =TextEncoder () -> IO (TextEncoder ()) forall (m :: * -> *) a. Monad m => a -> m a return (BufferCodec :: forall from to state. CodeBuffer from to -> (Buffer from -> Buffer to -> IO (Buffer from, Buffer to)) -> IO () -> IO state -> (state -> IO ()) -> BufferCodec from to state BufferCodec {encode :: CodeBuffer Char Word8 encode =CodeBuffer Char Word8 ascii_encode ,recover :: Buffer Char -> Buffer Word8 -> IO (Buffer Char, Buffer Word8) recover =CodingFailureMode -> Buffer Char -> Buffer Word8 -> IO (Buffer Char, Buffer Word8) recoverEncode CodingFailureMode cfm ,close :: IO () close =() -> IO () forall (m :: * -> *) a. Monad m => a -> m a return (),getState :: IO () getState =() -> IO () forall (m :: * -> *) a. Monad m => a -> m a return (),setState :: () -> IO () setState =IO () -> () -> IO () forall a b. a -> b -> a const (IO () -> () -> IO ()) -> IO () -> () -> IO () forall a b. (a -> b) -> a -> b $ () -> IO () forall (m :: * -> *) a. Monad m => a -> m a return ()})-- ------------------------------------------------------------------------------- The actual decoders and encoders-- TODO: Eliminate code duplication between the checked and unchecked-- versions of the decoder or encoder (but don't change the Core!)latin1_decode ::DecodeBuffer latin1_decode :: CodeBuffer Word8 Char latin1_decode input :: Buffer Word8 input @Buffer {bufRaw :: forall e. Buffer e -> RawBuffer e bufRaw =RawBuffer Word8 iraw ,bufL :: forall e. Buffer e -> Int bufL =Int ir0 ,bufR :: forall e. Buffer e -> Int bufR =Int iw ,bufSize :: forall e. Buffer e -> Int bufSize =Int _}output :: Buffer Char output @Buffer {bufRaw :: forall e. Buffer e -> RawBuffer e bufRaw =RawBuffer Char oraw ,bufL :: forall e. Buffer e -> Int bufL =Int _,bufR :: forall e. Buffer e -> Int bufR =Int ow0 ,bufSize :: forall e. Buffer e -> Int bufSize =Int os }=letloop :: Int -> Int -> IO (CodingProgress, Buffer Word8, Buffer Char) loop !Int ir !Int ow |Int ow Int -> Int -> Bool forall a. Ord a => a -> a -> Bool >=Int os =CodingProgress -> Int -> Int -> IO (CodingProgress, Buffer Word8, Buffer Char) forall (m :: * -> *) a. Monad m => a -> Int -> Int -> m (a, Buffer Word8, Buffer Char) done CodingProgress OutputUnderflow Int ir Int ow |Int ir Int -> Int -> Bool forall a. Ord a => a -> a -> Bool >=Int iw =CodingProgress -> Int -> Int -> IO (CodingProgress, Buffer Word8, Buffer Char) forall (m :: * -> *) a. Monad m => a -> Int -> Int -> m (a, Buffer Word8, Buffer Char) done CodingProgress InputUnderflow Int ir Int ow |Bool otherwise =doWord8 c0 <-RawBuffer Word8 -> Int -> IO Word8 readWord8Buf RawBuffer Word8 iraw Int ir Int ow' <-RawBuffer Char -> Int -> Char -> IO Int writeCharBuf RawBuffer Char oraw Int ow (Int -> Char unsafeChr (Word8 -> Int forall a b. (Integral a, Num b) => a -> b fromIntegral Word8 c0 ))Int -> Int -> IO (CodingProgress, Buffer Word8, Buffer Char) loop (Int ir Int -> Int -> Int forall a. Num a => a -> a -> a + 1)Int ow' -- lambda-lifted, to avoid thunks being built in the inner-loop:done :: a -> Int -> Int -> m (a, Buffer Word8, Buffer Char) done why :: a why !Int ir !Int ow =(a, Buffer Word8, Buffer Char) -> m (a, Buffer Word8, Buffer Char) forall (m :: * -> *) a. Monad m => a -> m a return (a why ,ifInt ir Int -> Int -> Bool forall a. Eq a => a -> a -> Bool ==Int iw thenBuffer Word8 input {bufL :: Int bufL =0,bufR :: Int bufR =0}elseBuffer Word8 input {bufL :: Int bufL =Int ir },Buffer Char output {bufR :: Int bufR =Int ow })inInt -> Int -> IO (CodingProgress, Buffer Word8, Buffer Char) loop Int ir0 Int ow0 ascii_decode ::DecodeBuffer ascii_decode :: CodeBuffer Word8 Char ascii_decode input :: Buffer Word8 input @Buffer {bufRaw :: forall e. Buffer e -> RawBuffer e bufRaw =RawBuffer Word8 iraw ,bufL :: forall e. Buffer e -> Int bufL =Int ir0 ,bufR :: forall e. Buffer e -> Int bufR =Int iw ,bufSize :: forall e. Buffer e -> Int bufSize =Int _}output :: Buffer Char output @Buffer {bufRaw :: forall e. Buffer e -> RawBuffer e bufRaw =RawBuffer Char oraw ,bufL :: forall e. Buffer e -> Int bufL =Int _,bufR :: forall e. Buffer e -> Int bufR =Int ow0 ,bufSize :: forall e. Buffer e -> Int bufSize =Int os }=letloop :: Int -> Int -> IO (CodingProgress, Buffer Word8, Buffer Char) loop !Int ir !Int ow |Int ow Int -> Int -> Bool forall a. Ord a => a -> a -> Bool >=Int os =CodingProgress -> Int -> Int -> IO (CodingProgress, Buffer Word8, Buffer Char) forall (m :: * -> *) a. Monad m => a -> Int -> Int -> m (a, Buffer Word8, Buffer Char) done CodingProgress OutputUnderflow Int ir Int ow |Int ir Int -> Int -> Bool forall a. Ord a => a -> a -> Bool >=Int iw =CodingProgress -> Int -> Int -> IO (CodingProgress, Buffer Word8, Buffer Char) forall (m :: * -> *) a. Monad m => a -> Int -> Int -> m (a, Buffer Word8, Buffer Char) done CodingProgress InputUnderflow Int ir Int ow |Bool otherwise =doWord8 c0 <-RawBuffer Word8 -> Int -> IO Word8 readWord8Buf RawBuffer Word8 iraw Int ir ifWord8 c0 Word8 -> Word8 -> Bool forall a. Ord a => a -> a -> Bool >0x7fthenIO (CodingProgress, Buffer Word8, Buffer Char) invalid elsedoInt ow' <-RawBuffer Char -> Int -> Char -> IO Int writeCharBuf RawBuffer Char oraw Int ow (Int -> Char unsafeChr (Word8 -> Int forall a b. (Integral a, Num b) => a -> b fromIntegral Word8 c0 ))Int -> Int -> IO (CodingProgress, Buffer Word8, Buffer Char) loop (Int ir Int -> Int -> Int forall a. Num a => a -> a -> a + 1)Int ow' whereinvalid :: IO (CodingProgress, Buffer Word8, Buffer Char) invalid =CodingProgress -> Int -> Int -> IO (CodingProgress, Buffer Word8, Buffer Char) forall (m :: * -> *) a. Monad m => a -> Int -> Int -> m (a, Buffer Word8, Buffer Char) done CodingProgress InvalidSequence Int ir Int ow -- lambda-lifted, to avoid thunks being built in the inner-loop:done :: a -> Int -> Int -> m (a, Buffer Word8, Buffer Char) done why :: a why !Int ir !Int ow =(a, Buffer Word8, Buffer Char) -> m (a, Buffer Word8, Buffer Char) forall (m :: * -> *) a. Monad m => a -> m a return (a why ,ifInt ir Int -> Int -> Bool forall a. Eq a => a -> a -> Bool ==Int iw thenBuffer Word8 input {bufL :: Int bufL =0,bufR :: Int bufR =0}elseBuffer Word8 input {bufL :: Int bufL =Int ir },Buffer Char output {bufR :: Int bufR =Int ow })inInt -> Int -> IO (CodingProgress, Buffer Word8, Buffer Char) loop Int ir0 Int ow0 latin1_encode ::EncodeBuffer latin1_encode :: CodeBuffer Char Word8 latin1_encode input :: Buffer Char input @Buffer {bufRaw :: forall e. Buffer e -> RawBuffer e bufRaw =RawBuffer Char iraw ,bufL :: forall e. Buffer e -> Int bufL =Int ir0 ,bufR :: forall e. Buffer e -> Int bufR =Int iw ,bufSize :: forall e. Buffer e -> Int bufSize =Int _}output :: Buffer Word8 output @Buffer {bufRaw :: forall e. Buffer e -> RawBuffer e bufRaw =RawBuffer Word8 oraw ,bufL :: forall e. Buffer e -> Int bufL =Int _,bufR :: forall e. Buffer e -> Int bufR =Int ow0 ,bufSize :: forall e. Buffer e -> Int bufSize =Int os }=letdone :: a -> Int -> Int -> m (a, Buffer Char, Buffer Word8) done why :: a why !Int ir !Int ow =(a, Buffer Char, Buffer Word8) -> m (a, Buffer Char, Buffer Word8) forall (m :: * -> *) a. Monad m => a -> m a return (a why ,ifInt ir Int -> Int -> Bool forall a. Eq a => a -> a -> Bool ==Int iw thenBuffer Char input {bufL :: Int bufL =0,bufR :: Int bufR =0}elseBuffer Char input {bufL :: Int bufL =Int ir },Buffer Word8 output {bufR :: Int bufR =Int ow })loop :: Int -> Int -> IO (CodingProgress, Buffer Char, Buffer Word8) loop !Int ir !Int ow |Int ow Int -> Int -> Bool forall a. Ord a => a -> a -> Bool >=Int os =CodingProgress -> Int -> Int -> IO (CodingProgress, Buffer Char, Buffer Word8) forall (m :: * -> *) a. Monad m => a -> Int -> Int -> m (a, Buffer Char, Buffer Word8) done CodingProgress OutputUnderflow Int ir Int ow |Int ir Int -> Int -> Bool forall a. Ord a => a -> a -> Bool >=Int iw =CodingProgress -> Int -> Int -> IO (CodingProgress, Buffer Char, Buffer Word8) forall (m :: * -> *) a. Monad m => a -> Int -> Int -> m (a, Buffer Char, Buffer Word8) done CodingProgress InputUnderflow Int ir Int ow |Bool otherwise =do(c :: Char c ,ir' :: Int ir' )<-RawBuffer Char -> Int -> IO (Char, Int) readCharBuf RawBuffer Char iraw Int ir RawBuffer Word8 -> Int -> Word8 -> IO () writeWord8Buf RawBuffer Word8 oraw Int ow (Int -> Word8 forall a b. (Integral a, Num b) => a -> b fromIntegral (Char -> Int ord Char c ))Int -> Int -> IO (CodingProgress, Buffer Char, Buffer Word8) loop Int ir' (Int ow Int -> Int -> Int forall a. Num a => a -> a -> a + 1)inInt -> Int -> IO (CodingProgress, Buffer Char, Buffer Word8) loop Int ir0 Int ow0 latin1_checked_encode ::EncodeBuffer latin1_checked_encode :: CodeBuffer Char Word8 latin1_checked_encode input :: Buffer Char input output :: Buffer Word8 output =Int -> CodeBuffer Char Word8 single_byte_checked_encode 0xffBuffer Char input Buffer Word8 output ascii_encode ::EncodeBuffer ascii_encode :: CodeBuffer Char Word8 ascii_encode input :: Buffer Char input output :: Buffer Word8 output =Int -> CodeBuffer Char Word8 single_byte_checked_encode 0x7fBuffer Char input Buffer Word8 output single_byte_checked_encode ::Int->EncodeBuffer single_byte_checked_encode :: Int -> CodeBuffer Char Word8 single_byte_checked_encode max_legal_char :: Int max_legal_char input :: Buffer Char input @Buffer {bufRaw :: forall e. Buffer e -> RawBuffer e bufRaw =RawBuffer Char iraw ,bufL :: forall e. Buffer e -> Int bufL =Int ir0 ,bufR :: forall e. Buffer e -> Int bufR =Int iw ,bufSize :: forall e. Buffer e -> Int bufSize =Int _}output :: Buffer Word8 output @Buffer {bufRaw :: forall e. Buffer e -> RawBuffer e bufRaw =RawBuffer Word8 oraw ,bufL :: forall e. Buffer e -> Int bufL =Int _,bufR :: forall e. Buffer e -> Int bufR =Int ow0 ,bufSize :: forall e. Buffer e -> Int bufSize =Int os }=letdone :: a -> Int -> Int -> m (a, Buffer Char, Buffer Word8) done why :: a why !Int ir !Int ow =(a, Buffer Char, Buffer Word8) -> m (a, Buffer Char, Buffer Word8) forall (m :: * -> *) a. Monad m => a -> m a return (a why ,ifInt ir Int -> Int -> Bool forall a. Eq a => a -> a -> Bool ==Int iw thenBuffer Char input {bufL :: Int bufL =0,bufR :: Int bufR =0}elseBuffer Char input {bufL :: Int bufL =Int ir },Buffer Word8 output {bufR :: Int bufR =Int ow })loop :: Int -> Int -> IO (CodingProgress, Buffer Char, Buffer Word8) loop !Int ir !Int ow |Int ow Int -> Int -> Bool forall a. Ord a => a -> a -> Bool >=Int os =CodingProgress -> Int -> Int -> IO (CodingProgress, Buffer Char, Buffer Word8) forall (m :: * -> *) a. Monad m => a -> Int -> Int -> m (a, Buffer Char, Buffer Word8) done CodingProgress OutputUnderflow Int ir Int ow |Int ir Int -> Int -> Bool forall a. Ord a => a -> a -> Bool >=Int iw =CodingProgress -> Int -> Int -> IO (CodingProgress, Buffer Char, Buffer Word8) forall (m :: * -> *) a. Monad m => a -> Int -> Int -> m (a, Buffer Char, Buffer Word8) done CodingProgress InputUnderflow Int ir Int ow |Bool otherwise =do(c :: Char c ,ir' :: Int ir' )<-RawBuffer Char -> Int -> IO (Char, Int) readCharBuf RawBuffer Char iraw Int ir ifChar -> Int ord Char c Int -> Int -> Bool forall a. Ord a => a -> a -> Bool >Int max_legal_char thenIO (CodingProgress, Buffer Char, Buffer Word8) invalid elsedoRawBuffer Word8 -> Int -> Word8 -> IO () writeWord8Buf RawBuffer Word8 oraw Int ow (Int -> Word8 forall a b. (Integral a, Num b) => a -> b fromIntegral (Char -> Int ord Char c ))Int -> Int -> IO (CodingProgress, Buffer Char, Buffer Word8) loop Int ir' (Int ow Int -> Int -> Int forall a. Num a => a -> a -> a + 1)whereinvalid :: IO (CodingProgress, Buffer Char, Buffer Word8) invalid =CodingProgress -> Int -> Int -> IO (CodingProgress, Buffer Char, Buffer Word8) forall (m :: * -> *) a. Monad m => a -> Int -> Int -> m (a, Buffer Char, Buffer Word8) done CodingProgress InvalidSequence Int ir Int ow inInt -> Int -> IO (CodingProgress, Buffer Char, Buffer Word8) loop Int ir0 Int ow0 {-# INLINEsingle_byte_checked_encode #-}