module Data.Packed.Packed (
Packed (..),
unsafeToPacked,
fromPacked,
unsafeCastPacked,
duplicate,
) where
import Control.DeepSeq
import Data.ByteString (copy)
import Data.ByteString.Internal
import Data.Kind (Type)
newtype Packed (l :: [Type]) = Packed ByteString
instance NFData (Packed a) where
rnf :: Packed a -> ()
rnf Packed a
packed = Packed a -> ByteString
forall (a :: [*]). Packed a -> ByteString
fromPacked Packed a
packed ByteString -> () -> ()
forall a b. a -> b -> b
`Prelude.seq` ()
duplicate :: Packed a -> Packed a
duplicate :: forall (a :: [*]). Packed a -> Packed a
duplicate (Packed ByteString
bs) = ByteString -> Packed a
forall (l :: [*]). ByteString -> Packed l
Packed (ByteString -> Packed a) -> ByteString -> Packed a
forall a b. (a -> b) -> a -> b
$ ByteString -> ByteString
copy ByteString
bs
{-# INLINE unsafeToPacked #-}
unsafeToPacked :: ByteString -> Packed a
unsafeToPacked :: forall (l :: [*]). ByteString -> Packed l
unsafeToPacked = ByteString -> Packed a
forall (l :: [*]). ByteString -> Packed l
Packed
{-# INLINE fromPacked #-}
fromPacked :: Packed a -> ByteString
fromPacked :: forall (a :: [*]). Packed a -> ByteString
fromPacked (Packed ByteString
bs) = ByteString
bs
{-# INLINE unsafeCastPacked #-}
unsafeCastPacked :: Packed a -> Packed b
unsafeCastPacked :: forall (a :: [*]) (b :: [*]). Packed a -> Packed b
unsafeCastPacked = ByteString -> Packed b
forall (l :: [*]). ByteString -> Packed l
unsafeToPacked (ByteString -> Packed b)
-> (Packed a -> ByteString) -> Packed a -> Packed b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Packed a -> ByteString
forall (a :: [*]). Packed a -> ByteString
fromPacked