typed-encoding-0.4.0.0: Type safe string transformations

Safe HaskellSafe
LanguageHaskell2010

Data.TypedEncoding.Conv.ByteString.Char8

Description

Encoding safe(r) version of Data.ByteString.Char8 @since 0.2.2.0

Synopsis

Documentation

>>> :set -XDataKinds -XTypeApplications -XOverloadedStrings

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.

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 alternatives with different safety levels.

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

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