{-# LANGUAGE NoImplicitPrelude #-}

-- | Strict @ByteString@. Import as:
--
-- > import qualified RIO.ByteString as B
--
-- This module does not export any partial functions.  For those, see
-- "RIO.ByteString.Partial"
module RIO.ByteString
  ( module Data.ByteString
  , module RIO.ByteString
  ) where

import Data.ByteString hiding (head, last, tail, init, foldl1, foldl1', foldr1, foldr1', maximum, minimum, findSubstring, findSubstrings, packCString, packCStringLen, useAsCString, useAsCStringLen, getLine, getContents, putStr, putStrLn, interact, readFile, writeFile, appendFile, hGetLine, hGetContents, hGet, hGetSome, hGetNonBlocking, hPut, hPutNonBlocking, hPutStr, hPutStrLn, breakByte)
import qualified Data.ByteString as B
import RIO
import Foreign.C.String (CString, CStringLen)

-- | Lifted 'B.packCString'
packCString :: MonadIO m => CString -> m ByteString
packCString :: forall (m :: * -> *). MonadIO m => CString -> m ByteString
packCString = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. CString -> IO ByteString
B.packCString

-- | Lifted 'B.packCStringLen'
packCStringLen :: MonadIO m => CStringLen -> m ByteString
packCStringLen :: forall (m :: * -> *). MonadIO m => CStringLen -> m ByteString
packCStringLen = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. CStringLen -> IO ByteString
B.packCStringLen

-- | Unlifted 'B.useAsCString'
useAsCString :: MonadUnliftIO m => ByteString -> (CString -> m a) -> m a
useAsCString :: forall (m :: * -> *) a.
MonadUnliftIO m =>
ByteString -> (CString -> m a) -> m a
useAsCString ByteString
bs CString -> m a
inner = forall (m :: * -> *) b.
MonadUnliftIO m =>
((forall a. m a -> IO a) -> IO b) -> m b
withRunInIO forall a b. (a -> b) -> a -> b
$ \forall a. m a -> IO a
run -> forall a. ByteString -> (CString -> IO a) -> IO a
B.useAsCString ByteString
bs forall a b. (a -> b) -> a -> b
$ forall a. m a -> IO a
run forall b c a. (b -> c) -> (a -> b) -> a -> c
. CString -> m a
inner

-- | Unlifted 'B.useAsCStringLen'
useAsCStringLen :: MonadUnliftIO m => ByteString -> (CStringLen -> m a) -> m a
useAsCStringLen :: forall (m :: * -> *) a.
MonadUnliftIO m =>
ByteString -> (CStringLen -> m a) -> m a
useAsCStringLen ByteString
bs CStringLen -> m a
inner = forall (m :: * -> *) b.
MonadUnliftIO m =>
((forall a. m a -> IO a) -> IO b) -> m b
withRunInIO forall a b. (a -> b) -> a -> b
$ \forall a. m a -> IO a
run -> forall a. ByteString -> (CStringLen -> IO a) -> IO a
B.useAsCStringLen ByteString
bs forall a b. (a -> b) -> a -> b
$ forall a. m a -> IO a
run forall b c a. (b -> c) -> (a -> b) -> a -> c
. CStringLen -> m a
inner

-- | Lifted 'B.getLine'
getLine :: MonadIO m => m ByteString
getLine :: forall (m :: * -> *). MonadIO m => m ByteString
getLine = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO IO ByteString
B.getLine

-- | Lifted 'B.getContents'
getContents :: MonadIO m => m ByteString
getContents :: forall (m :: * -> *). MonadIO m => m ByteString
getContents = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO IO ByteString
B.getContents

-- | Lifted 'B.putStr'
putStr :: MonadIO m => ByteString -> m ()
putStr :: forall (m :: * -> *). MonadIO m => ByteString -> m ()
putStr = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> IO ()
B.putStr

-- | Lifted 'B.interact'
interact :: MonadIO m => (ByteString -> ByteString) -> m ()
interact :: forall (m :: * -> *).
MonadIO m =>
(ByteString -> ByteString) -> m ()
interact = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ByteString -> ByteString) -> IO ()
B.interact

-- | Lifted 'B.readFile'
readFile :: MonadIO m => FilePath -> m ByteString
readFile :: forall (m :: * -> *). MonadIO m => FilePath -> m ByteString
readFile = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> IO ByteString
B.readFile

-- | Lifted 'B.writeFile'
writeFile :: MonadIO m => FilePath -> ByteString -> m ()
writeFile :: forall (m :: * -> *). MonadIO m => FilePath -> ByteString -> m ()
writeFile FilePath
fp = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> ByteString -> IO ()
B.writeFile FilePath
fp

-- | Lifted 'B.appendFile'
appendFile :: MonadIO m => FilePath -> ByteString -> m ()
appendFile :: forall (m :: * -> *). MonadIO m => FilePath -> ByteString -> m ()
appendFile FilePath
fp = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. FilePath -> ByteString -> IO ()
B.appendFile FilePath
fp

-- | Lifted 'B.hGetLine'
hGetLine :: MonadIO m => Handle -> m ByteString
hGetLine :: forall (m :: * -> *). MonadIO m => Handle -> m ByteString
hGetLine = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. Handle -> IO ByteString
B.hGetLine

-- | Lifted 'B.hGetContents'
hGetContents :: MonadIO m => Handle -> m ByteString
hGetContents :: forall (m :: * -> *). MonadIO m => Handle -> m ByteString
hGetContents = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. Handle -> IO ByteString
B.hGetContents

-- | Lifted 'B.hGet'
hGet :: MonadIO m => Handle -> Int -> m ByteString
hGet :: forall (m :: * -> *). MonadIO m => Handle -> Int -> m ByteString
hGet Handle
h = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. Handle -> Int -> IO ByteString
B.hGet Handle
h

-- | Lifted 'B.hGetSome'
hGetSome :: MonadIO m => Handle -> Int -> m ByteString
hGetSome :: forall (m :: * -> *). MonadIO m => Handle -> Int -> m ByteString
hGetSome Handle
h = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. Handle -> Int -> IO ByteString
B.hGetSome Handle
h

-- | Lifted 'B.hGetNonBlocking'
hGetNonBlocking :: MonadIO m => Handle -> Int -> m ByteString
hGetNonBlocking :: forall (m :: * -> *). MonadIO m => Handle -> Int -> m ByteString
hGetNonBlocking Handle
h = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. Handle -> Int -> IO ByteString
B.hGetNonBlocking Handle
h

-- | Lifted 'B.hPut'
hPut :: MonadIO m => Handle -> ByteString -> m ()
hPut :: forall (m :: * -> *). MonadIO m => Handle -> ByteString -> m ()
hPut Handle
h = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. Handle -> ByteString -> IO ()
B.hPut Handle
h

-- | Lifted 'B.hPutNonBlocking'
hPutNonBlocking :: MonadIO m => Handle -> ByteString -> m ByteString
hPutNonBlocking :: forall (m :: * -> *).
MonadIO m =>
Handle -> ByteString -> m ByteString
hPutNonBlocking Handle
h = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. Handle -> ByteString -> IO ByteString
B.hPutNonBlocking Handle
h

-- | Lifted 'B.hPutStr'
hPutStr :: MonadIO m => Handle -> ByteString -> m ()
hPutStr :: forall (m :: * -> *). MonadIO m => Handle -> ByteString -> m ()
hPutStr Handle
h = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. Handle -> ByteString -> IO ()
B.hPutStr Handle
h