{-# LANGUAGE ViewPatterns #-}
{-# LANGUAGE PatternSynonyms #-}
module Data.ByteString.Optics
( IsByteString(..)
, unpackedBytes
, unpackedChars
, pattern Bytes
, pattern Chars
) where
import qualified Data.ByteString as Strict
import qualified Data.ByteString.Lazy as Lazy
import Data.Int (Int64)
import Data.Word (Word8)
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 #-}