MicroHs-0.10.3.0: lib/Data/ByteString/Internal.hs
module Data.ByteString.Internal(module Data.ByteString.Internal) where
import Prelude(); import MiniPrelude hiding(length)
import Data.Word(Word8)
data ByteString -- primitive type
primBSappend :: ByteString -> ByteString -> ByteString
primBSappend = primitive "bs++"
primBSappend3 :: ByteString -> ByteString -> ByteString -> ByteString
primBSappend3 = primitive "bs+++"
primBSEQ :: ByteString -> ByteString -> Bool
primBSEQ = primitive "bs=="
primBSNE :: ByteString -> ByteString -> Bool
primBSNE = primitive "bs/="
primBSLT :: ByteString -> ByteString -> Bool
primBSLT = primitive "bs<"
primBSLE :: ByteString -> ByteString -> Bool
primBSLE = primitive "bs<="
primBSGT :: ByteString -> ByteString -> Bool
primBSGT = primitive "bs>"
primBSGE :: ByteString -> ByteString -> Bool
primBSGE = primitive "bs>="
primBScmp :: ByteString -> ByteString -> Ordering
primBScmp = primitive "bscmp"
primBSpack :: [Word8] -> ByteString
primBSpack = primitive "bspack"
primBSunpack :: ByteString -> [Word8]
primBSunpack = primitive "bsunpack"
primBSlength :: ByteString -> Int
primBSlength = primitive "bslength"
primBSsubstr :: ByteString -> Int -> Int -> ByteString
primBSsubstr = primitive "bssubstr"
-----------------------------------------
instance Eq ByteString where
(==) = primBSEQ
(/=) = primBSNE
instance Ord ByteString where
compare = primBScmp
(<) = primBSLT
(<=) = primBSLE
(>) = primBSGT
(>=) = primBSGE
instance Show ByteString where
showsPrec p bs = showsPrec p (toString bs)
instance IsString ByteString where
fromString = pack . map (toEnum . fromEnum)
instance Semigroup ByteString where
(<>) = append
instance Monoid ByteString where
mempty = empty
toString :: ByteString -> String
toString = map (toEnum . fromEnum) . unpack
empty :: ByteString
empty = pack []
singleton :: Word8 -> ByteString
singleton c = pack [c]
length :: ByteString -> Int
length = primBSlength
append :: ByteString -> ByteString -> ByteString
append = primBSappend
substr :: ByteString -> Int -> Int -> ByteString
substr bs offs len
| offs < 0 || offs > sz = bsError "substr bad offset"
| len < 0 || len > sz-offs = bsError "substr bad length"
| otherwise = primBSsubstr bs offs len
where sz = length bs
bsError :: String -> a
bsError s = error $ "Data.ByteString." ++ s
pack :: [Word8] -> ByteString
pack = primBSpack
unpack :: ByteString -> [Word8]
unpack = primBSunpack