{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE PolyKinds #-} -- removes need to annotate kinds as [Symbol]

-- | Lazy version of "Data.TypedEncoding.Conv.ByteString.Char8"
-- @since 0.2.2.0
module Data.TypedEncoding.Conv.ByteString.Lazy.Char8 where

import qualified Data.ByteString.Lazy.Char8 as BL8
import qualified Data.TypedEncoding.Common.Util.TypeLits as Knds
import           Data.TypedEncoding.Instances.Support

-- $setup
-- >>> :set -XDataKinds -XTypeApplications -XOverloadedStrings

-- | 
-- Lazy version of 'Data.TypedEncoding.Conv.ByteString.Char8.pack'.
pack :: (
     Knds.UnSnoc xs ~ '(,) ys y
    , Superset "r-CHAR8" y
    , encs ~ RemoveRs ys
    , AllEncodeInto "r-CHAR8" encs
    ) => Enc xs c String -> Enc xs c BL8.ByteString
pack = unsafeChangePayload BL8.pack

-- | 
-- Lazy version of 'Data.TypedEncoding.Conv.ByteString.Char8.unpack'.
unpack :: (
          Knds.UnSnoc xs ~ '(,) ys y
        , Superset "r-CHAR8" y
        , encs ~ RemoveRs ys
        , AllEncodeInto "r-CHAR8" encs
       ) => Enc xs c BL8.ByteString -> Enc xs c String
unpack = unsafeChangePayload BL8.unpack

-- | 
-- Lazy version of 'Data.TypedEncoding.Conv.ByteString.Char8.pack'''.
pack'' :: (
    Knds.UnSnoc xs ~ '(,) ys y
    , EncodingAnn y
    , encs ~ RemoveRs ys
    , AllEncodeInto "r-CHAR8" encs
    ) => Enc xs c String -> Enc xs c BL8.ByteString
pack'' = unsafeChangePayload BL8.pack

-- | 
-- Lazy version of 'Data.TypedEncoding.Conv.ByteString.Char8.unpack'''.
unpack'' :: (
          Knds.UnSnoc xs ~ '(,) ys y
         , EncodingAnn y
         , encs ~ RemoveRs ys
         , AllEncodeInto "r-CHAR8" encs
          ) => Enc xs c BL8.ByteString -> Enc xs c String
unpack'' = unsafeChangePayload BL8.unpack