{-# LANGUAGE NoImplicitPrelude #-}

-- | This module provides a first-class version
-- of the "Data.ByteString" module.
module ModularPrelude.Module.ByteString
  ( -- * Module interface
    ByteStringModule (..)
    -- * Module contents
  , ByteStringImplements (..)
  ) where


import ModularPrelude hiding (empty)
import qualified Data.ByteString as ByteString
import qualified Filesystem.Path.CurrentOS as FilePath


data ByteStringModule = ByteString
  { ByteStringModule -> (Word8 -> Word8) -> ByteString -> ByteString
map       :: (Word8 -> Word8) -> ByteString -> ByteString
  , ByteStringModule
-> (Word8 -> ByteString) -> ByteString -> ByteString
concatMap :: (Word8 -> ByteString) -> ByteString -> ByteString
  , ByteStringModule -> (Word8 -> Bool) -> ByteString -> ByteString
filter    :: (Word8 -> Bool) -> ByteString -> ByteString
  , ByteStringModule -> ByteString -> Int
length    :: ByteString -> Int
  , ByteStringModule -> Word8 -> ByteString
singleton :: Word8 -> ByteString
  , ByteStringModule -> ByteString -> Bool
null      :: ByteString -> Bool
  , ByteStringModule -> [Word8] -> ByteString
pack      :: [Word8] -> ByteString
  , ByteStringModule -> ByteString -> [Word8]
unpack    :: ByteString -> [Word8]
  , ByteStringModule -> ByteString
empty     :: ByteString
  , ByteStringModule -> FilePath -> IO ByteString
readFile  :: FilePath -> IO ByteString
  , ByteStringModule -> FilePath -> ByteString -> IO ()
writeFile :: FilePath -> ByteString -> IO ()
  , ByteStringModule
-> (Word8 -> Bool) -> ByteString -> (ByteString, ByteString)
break     :: (Word8 -> Bool) -> ByteString -> (ByteString, ByteString)
  , ByteStringModule
-> (Word8 -> Bool) -> ByteString -> (ByteString, ByteString)
span      :: (Word8 -> Bool) -> ByteString -> (ByteString, ByteString)
  , ByteStringModule -> (Word8 -> Bool) -> ByteString -> ByteString
dropWhile :: (Word8 -> Bool) -> ByteString -> ByteString
  , ByteStringModule -> (Word8 -> Bool) -> ByteString -> ByteString
takeWhile :: (Word8 -> Bool) -> ByteString -> ByteString
  , ByteStringModule -> (Word8 -> Bool) -> ByteString -> Bool
any       :: (Word8 -> Bool) -> ByteString -> Bool
  , ByteStringModule -> (Word8 -> Bool) -> ByteString -> Bool
all       :: (Word8 -> Bool) -> ByteString -> Bool
  , ByteStringModule -> Int -> ByteString -> (ByteString, ByteString)
splitAt   :: Int -> ByteString -> (ByteString, ByteString)
  }


class ByteStringImplements interface where
  _Data_ByteString_ :: interface

instance ByteStringImplements ByteStringModule where
  _Data_ByteString_ :: ByteStringModule
_Data_ByteString_ = ByteString
    { map :: (Word8 -> Word8) -> ByteString -> ByteString
map       = (Word8 -> Word8) -> ByteString -> ByteString
ByteString.map
    , concatMap :: (Word8 -> ByteString) -> ByteString -> ByteString
concatMap = (Word8 -> ByteString) -> ByteString -> ByteString
ByteString.concatMap
    , filter :: (Word8 -> Bool) -> ByteString -> ByteString
filter    = (Word8 -> Bool) -> ByteString -> ByteString
ByteString.filter
    , length :: ByteString -> Int
length    = ByteString -> Int
ByteString.length
    , singleton :: Word8 -> ByteString
singleton = Word8 -> ByteString
ByteString.singleton
    , null :: ByteString -> Bool
null      = ByteString -> Bool
ByteString.null
    , pack :: [Word8] -> ByteString
pack      = [Word8] -> ByteString
ByteString.pack
    , unpack :: ByteString -> [Word8]
unpack    = ByteString -> [Word8]
ByteString.unpack
    , empty :: ByteString
empty     = ByteString
ByteString.empty
    , readFile :: FilePath -> IO ByteString
readFile  = FilePath -> IO ByteString
ByteString.readFile (FilePath -> IO ByteString)
-> (FilePath -> FilePath) -> FilePath -> IO ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. FilePath -> FilePath
FilePath.encodeString
    , writeFile :: FilePath -> ByteString -> IO ()
writeFile = FilePath -> ByteString -> IO ()
ByteString.writeFile (FilePath -> ByteString -> IO ())
-> (FilePath -> FilePath) -> FilePath -> ByteString -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. FilePath -> FilePath
FilePath.encodeString
    , break :: (Word8 -> Bool) -> ByteString -> (ByteString, ByteString)
break     = (Word8 -> Bool) -> ByteString -> (ByteString, ByteString)
ByteString.break
    , span :: (Word8 -> Bool) -> ByteString -> (ByteString, ByteString)
span      = (Word8 -> Bool) -> ByteString -> (ByteString, ByteString)
ByteString.span
    , dropWhile :: (Word8 -> Bool) -> ByteString -> ByteString
dropWhile = (Word8 -> Bool) -> ByteString -> ByteString
ByteString.dropWhile
    , takeWhile :: (Word8 -> Bool) -> ByteString -> ByteString
takeWhile = (Word8 -> Bool) -> ByteString -> ByteString
ByteString.takeWhile
    , any :: (Word8 -> Bool) -> ByteString -> Bool
any       = (Word8 -> Bool) -> ByteString -> Bool
ByteString.any
    , all :: (Word8 -> Bool) -> ByteString -> Bool
all       = (Word8 -> Bool) -> ByteString -> Bool
ByteString.all
    , splitAt :: Int -> ByteString -> (ByteString, ByteString)
splitAt   = Int -> ByteString -> (ByteString, ByteString)
ByteString.splitAt
    }


instance Default ByteStringModule where
  def :: ByteStringModule
def = ByteStringModule
forall interface. ByteStringImplements interface => interface
_Data_ByteString_