{-# LANGUAGE ViewPatterns #-}
{-# LANGUAGE PatternSynonyms #-}
module Data.ByteString.Optics
( IsByteString(..)
, unpackedBytes
, unpackedChars
, pattern Bytes
, pattern Chars
) where
import Data.ByteString as Strict
import Data.ByteString.Lazy as Lazy
import Data.Int
import Data.Word
import qualified Data.ByteString.Lazy.Optics as Lazy
import qualified Data.ByteString.Strict.Optics as Strict
import Optics.Core
class IsByteString t where
packedBytes :: Iso' [Word8] t
packedChars :: Iso' String t
bytes :: IxTraversal' Int64 t Word8
chars :: IxTraversal' Int64 t Char
unpackedBytes :: IsByteString t => Iso' t [Word8]
unpackedBytes :: Iso' t [Word8]
unpackedBytes = Optic An_Iso NoIx [Word8] [Word8] t t
-> Optic (ReversedOptic An_Iso) NoIx t t [Word8] [Word8]
forall (k :: OpticKind) (is :: IxList) (s :: OpticKind)
(t :: OpticKind) (a :: OpticKind) (b :: OpticKind).
(ReversibleOptic k, AcceptsEmptyIndices "re" is) =>
Optic k is s t a b -> Optic (ReversedOptic k) is b a t s
re Optic An_Iso NoIx [Word8] [Word8] t t
forall (t :: OpticKind). IsByteString t => Iso' [Word8] t
packedBytes
{-# INLINE unpackedBytes #-}
pattern Bytes :: IsByteString t => [Word8] -> t
pattern $bBytes :: [Word8] -> t
$mBytes :: forall r (t :: OpticKind).
IsByteString t =>
t -> ([Word8] -> r) -> (Void# -> r) -> r
Bytes b <- (view unpackedBytes -> b) where
Bytes [Word8]
b = Optic' An_Iso NoIx t [Word8] -> [Word8] -> t
forall (k :: OpticKind) (is :: IxList) (t :: OpticKind)
(b :: OpticKind).
Is k A_Review =>
Optic' k is t b -> b -> t
review Optic' An_Iso NoIx t [Word8]
forall (t :: OpticKind). IsByteString t => Iso' t [Word8]
unpackedBytes [Word8]
b
pattern Chars :: IsByteString t => [Char] -> t
pattern $bChars :: [Char] -> t
$mChars :: forall r (t :: OpticKind).
IsByteString t =>
t -> ([Char] -> r) -> (Void# -> r) -> r
Chars b <- (view unpackedChars -> b) where
Chars [Char]
b = Optic' An_Iso NoIx t [Char] -> [Char] -> t
forall (k :: OpticKind) (is :: IxList) (t :: OpticKind)
(b :: OpticKind).
Is k A_Review =>
Optic' k is t b -> b -> t
review Optic' An_Iso NoIx t [Char]
forall (t :: OpticKind). IsByteString t => Iso' t [Char]
unpackedChars [Char]
b
unpackedChars :: IsByteString t => Iso' t String
unpackedChars :: Iso' t [Char]
unpackedChars = Optic An_Iso NoIx [Char] [Char] t t
-> Optic (ReversedOptic An_Iso) NoIx t t [Char] [Char]
forall (k :: OpticKind) (is :: IxList) (s :: OpticKind)
(t :: OpticKind) (a :: OpticKind) (b :: OpticKind).
(ReversibleOptic k, AcceptsEmptyIndices "re" is) =>
Optic k is s t a b -> Optic (ReversedOptic k) is b a t s
re Optic An_Iso NoIx [Char] [Char] t t
forall (t :: OpticKind). IsByteString t => Iso' [Char] t
packedChars
{-# INLINE unpackedChars #-}
instance IsByteString Strict.ByteString where
packedBytes :: Iso' [Word8] ByteString
packedBytes = Iso' [Word8] ByteString
Strict.packedBytes
packedChars :: Iso' [Char] ByteString
packedChars = Iso' [Char] ByteString
Strict.packedChars
bytes :: IxTraversal' Int64 ByteString Word8
bytes = IxTraversal' Int64 ByteString Word8
Strict.bytes
chars :: IxTraversal' Int64 ByteString Char
chars = IxTraversal' Int64 ByteString Char
Strict.chars
{-# INLINE packedBytes #-}
{-# INLINE packedChars #-}
{-# INLINE bytes #-}
{-# INLINE chars #-}
instance IsByteString Lazy.ByteString where
packedBytes :: Iso' [Word8] ByteString
packedBytes = Iso' [Word8] ByteString
Lazy.packedBytes
packedChars :: Iso' [Char] ByteString
packedChars = Iso' [Char] ByteString
Lazy.packedChars
bytes :: IxTraversal' Int64 ByteString Word8
bytes = IxTraversal' Int64 ByteString Word8
Lazy.bytes
chars :: IxTraversal' Int64 ByteString Char
chars = IxTraversal' Int64 ByteString Char
Lazy.chars
{-# INLINE packedBytes #-}
{-# INLINE packedChars #-}
{-# INLINE bytes #-}
{-# INLINE chars #-}