optics-extra-0.3: Extra utilities and instances for optics-core

Safe HaskellNone
LanguageHaskell2010

Data.ByteString.Strict.Optics

Synopsis

Documentation

packedBytes :: Iso' [Word8] ByteString Source #

pack (or unpack) a list of bytes into a ByteString

packedBytesre unpackedBytes
pack x ≡  x ^. packedBytes
unpack x ≡ x ^. re packedBytes
>>> [104,101,108,108,111] ^. packedBytes
"hello"

unpackedBytes :: Iso' ByteString [Word8] Source #

unpack (or pack) a ByteString into a list of bytes.

unpackedBytesre packedBytes
unpack x ≡ x ^. unpackedBytes
pack x ≡  x ^. re unpackedBytes
>>> "hello" ^. packedChars % unpackedBytes
[104,101,108,108,111]

bytes :: IxTraversal' Int64 ByteString Word8 Source #

Traverse each Word8 in a ByteString.

This Traversal walks the ByteString in a tree-like fashion enable zippers to seek to locations in logarithmic time and accelerating many monoidal queries, but up to associativity (and constant factors) it is equivalent to the much slower:

bytesunpackedBytes % traversed
>>> anyOf bytes (== 0x80) (Char8.pack "hello")
False

Note that when just using this as a Setter, sets map can be more efficient.

packedChars :: Iso' String ByteString Source #

pack (or unpack) a list of characters into a ByteString

When writing back to the ByteString it is assumed that every Char lies between '\x00' and '\xff'.

packedCharsre unpackedChars
pack x ≡ x ^. packedChars
unpack x ≡ x ^. re packedChars
>>> foldOf (packedChars % each % to (\w -> let x = showHex w "" in if Prelude.length x == 1 then '0':x else x)) "hello"
"68656c6c6f"

unpackedChars :: Iso' ByteString String Source #

unpack (or pack) a list of characters into a ByteString

When writing back to the ByteString it is assumed that every Char lies between '\x00' and '\xff'.

unpackedCharsre packedChars
unpack x ≡ x ^. unpackedChars
pack x ≡ x ^. re unpackedChars
>>> [104,101,108,108,111] ^. packedBytes % unpackedChars
"hello"

chars :: IxTraversal' Int64 ByteString Char Source #

Traverse the individual bytes in a ByteString as characters.

When writing back to the ByteString it is assumed that every Char lies between '\x00' and '\xff'.

This Traversal walks the ByteString in a tree-like fashion enable zippers to seek to locations in logarithmic time and accelerating many monoidal queries, but up to associativity (and constant factors) it is equivalent to the much slower:

chars = unpackedChars % traversed
>>> anyOf chars (== 'h') $ Char8.pack "hello"
True

pattern Bytes :: [Word8] -> ByteString Source #

pattern Chars :: [Char] -> ByteString Source #