{-# LANGUAGE MagicHash #-}
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeFamilies #-}
module Data.Vector.Coerce.ByteString where

import           Data.ByteString          (ByteString)
import qualified Data.ByteString          as BS
import qualified Data.ByteString.Internal as BS
import qualified Data.Vector.Storable     as V
import qualified Data.Vector.Storable.Internal as V
import           Data.Vector.Storable     (Vector)
import           Data.Word

fromByteString :: ByteString -> Vector Word8
fromByteString (BS.PS fptr off len) = V.unsafeFromForeignPtr fptr off len

toByteString :: Vector Word8 -> ByteString
toByteString v = BS.PS fp s l
  where (fp, s, l) = V.unsafeToForeignPtr v