{-# 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 :: Enc @[Symbol] xs c String -> Enc @[Symbol] xs c ByteString
pack = (String -> ByteString)
-> Enc @[Symbol] xs c String -> Enc @[Symbol] xs c ByteString
forall k s1 s2 (e :: k) c.
(s1 -> s2) -> Enc @k e c s1 -> Enc @k e c s2
unsafeChangePayload String -> ByteString
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 :: Enc @[Symbol] xs c ByteString -> Enc @[Symbol] xs c String
unpack = (ByteString -> String)
-> Enc @[Symbol] xs c ByteString -> Enc @[Symbol] xs c String
forall k s1 s2 (e :: k) c.
(s1 -> s2) -> Enc @k e c s1 -> Enc @k e c s2
unsafeChangePayload ByteString -> String
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'' :: Enc @[Symbol] xs c String -> Enc @[Symbol] xs c ByteString
pack'' = (String -> ByteString)
-> Enc @[Symbol] xs c String -> Enc @[Symbol] xs c ByteString
forall k s1 s2 (e :: k) c.
(s1 -> s2) -> Enc @k e c s1 -> Enc @k e c s2
unsafeChangePayload String -> ByteString
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'' :: Enc @[Symbol] xs c ByteString -> Enc @[Symbol] xs c String
unpack'' = (ByteString -> String)
-> Enc @[Symbol] xs c ByteString -> Enc @[Symbol] xs c String
forall k s1 s2 (e :: k) c.
(s1 -> s2) -> Enc @k e c s1 -> Enc @k e c s2
unsafeChangePayload ByteString -> String
BL8.unpack