Safe Haskell | Safe |
---|---|
Language | Haskell2010 |
Encoding safe(r) version of Data.ByteString.Char8 @since 0.2.2.0
Synopsis
- pack :: (UnSnoc xs ~ (,) ys y, Superset "r-CHAR8" y, encs ~ RemoveRs ys, AllEncodeInto "r-CHAR8" encs) => Enc xs c String -> Enc xs c ByteString
- pack'' :: (UnSnoc xs ~ (,) ys y, EncodingAnn y, encs ~ RemoveRs ys, AllEncodeInto "r-CHAR8" encs) => Enc xs c String -> Enc xs c ByteString
- unpack :: (UnSnoc xs ~ (,) ys y, Superset "r-CHAR8" y, encs ~ RemoveRs ys, AllEncodeInto "r-CHAR8" encs) => Enc xs c ByteString -> Enc xs c String
- unpack'' :: (UnSnoc xs ~ (,) ys y, EncodingAnn y, encs ~ RemoveRs ys, AllEncodeInto "r-CHAR8" encs) => Enc xs c ByteString -> Enc xs c String
Documentation
>>>
:set -XDataKinds -XTypeApplications -XOverloadedStrings
>>>
import Data.TypedEncoding.Instances.Enc.Base64 ()
pack :: (UnSnoc xs ~ (,) ys y, Superset "r-CHAR8" y, encs ~ RemoveRs ys, AllEncodeInto "r-CHAR8" encs) => Enc xs c String -> Enc xs c ByteString Source #
Type safer version of pack
.
This assumes that each of the encodings in xs
work equivalently in String
and ByteString
.
See Examples.TypedEncoding.Conversions.
This function also (currently) does not insist that xs
is a valid encoding stack for ByteString
.
This will be reexamined in the future, possibly offering stricter overloads of pack
.
Expected encoding stack xs
needs to have "r-" as last element and it needs to be more restrictive
than "r-CHAR8" (String cannot have chars
> 255@). Otherwise any encodings other than "r-" need to
encode into "r-CHAR8".
See Data.TypedEncoding.Conv for more detailed discussion.
>>>
:t pack (undefined :: Enc '["r-bar", "r-foo"] () String)
... ... error: ... Couldn't match type ... ...
>>>
displ $ pack (unsafeSetPayload () "Hello" :: Enc '["r-bar", "r-ASCII"] () String)
"Enc '[r-bar,r-ASCII] () (ByteString Hello)"
Since: 0.4.0.0
pack'' :: (UnSnoc xs ~ (,) ys y, EncodingAnn y, encs ~ RemoveRs ys, AllEncodeInto "r-CHAR8" encs) => Enc xs c String -> Enc xs c ByteString Source #
Version of pack that works without first "r-" encoding.
>>>
displ $ pack'' (unsafeSetPayload () "SGVsbG8gV29ybGQ=" :: Enc '["enc-B64"] () String)
"Enc '[enc-B64] () (ByteString SGVsbG8gV29ybGQ=)"
Since: 0.4.1.0
unpack :: (UnSnoc xs ~ (,) ys y, Superset "r-CHAR8" y, encs ~ RemoveRs ys, AllEncodeInto "r-CHAR8" encs) => Enc xs c ByteString -> Enc xs c String Source #
unpack
on encoded strings.
See pack
Similarly to pack
this makes assumptions on what the encoding stack is allowed to do. These are not type checked.
Again, this is safe with any stack that uses "r-" only encodings.
Future versions of type-encoding are likely
to introduce constraints to guard this aspect of the type safety better.
Since: 0.4.0.0
unpack'' :: (UnSnoc xs ~ (,) ys y, EncodingAnn y, encs ~ RemoveRs ys, AllEncodeInto "r-CHAR8" encs) => Enc xs c ByteString -> Enc xs c String Source #
Version of pack that works without first "r-" encoding
>>>
displ $ unpack'' (unsafeSetPayload () "SGVsbG8gV29ybGQ=" :: Enc '["enc-B64"] () B8.ByteString)
"Enc '[enc-B64] () (String SGVsbG8gV29ybGQ=)"
Since: 0.4.1.0