base16
Copyright(c) 2020-2026 Emily Pillmore
LicenseBSD-style
MaintainerEmily Pillmore <emilypi@cohomolo.gy>
Stabilitystable
Portabilitynon-portable
Safe HaskellNone
LanguageHaskell2010

Data.ByteString.Base16

Description

This module contains ByteString-valued combinators for implementing the RFC 4648 specification of the Base16 encoding format. This includes lenient decoding variants, as well as internal and external validation for canonicity.

Synopsis

Documentation

encodeBase16 :: ByteString -> Base16 Text Source #

Encode a ByteString value as Base16 Text

See: RFC-4648 section 8

Examples:

>>> encodeBase16 "Sun"
"53756e"

encodeBase16' :: ByteString -> Base16 ByteString Source #

Encode a ByteString value as a Base16 ByteString value

See: RFC-4648 section 8

Examples:

>>> encodeBase16' "Sun"
"53756e"

decodeBase16 :: Base16 ByteString -> ByteString Source #

Decode a Base16-encoded ByteString value.

See: RFC-4648 section 8

Examples:

>>> decodeBase16 $ assertBase16 "53756e"
"Sun"

decodeBase16' :: Base16 Text -> ByteString Source #

Decode Base16 Text.

See: RFC-4648 section 8

Examples:

>>> decodeBase16' $ assertBase16 "53756e"
"Sun"

decodeBase16Untyped :: ByteString -> Either Text ByteString Source #

Decode an untyped Base16-encoded ByteString value with error-checking.

See: RFC-4648 section 8

Examples:

>>> decodeBase16Untyped "53756e"
Right "Sun"
>>> decodeBase16Untyped "6x"
Left "invalid character at offset: 1"

decodeBase16Lenient :: ByteString -> ByteString Source #

Decode a Base16-encoded ByteString value leniently, using a strategy that never fails

N.B.: this is not RFC 4648-compliant

Examples:

>>> decodeBase16Lenient "53756e"
"Sun"
>>> decodeBase16Lenient "6x6x"
"f"

parseBase16 :: ByteString -> Either Text (Base16 ByteString) Source #

Validate an untyped Base16 value and retain its encoded representation.

Accepts even-length ASCII hexadecimal input, including upper-case and mixed-case digits. Empty input is valid. The original input is preserved, and errors match decodeBase16Untyped.

Examples:

>>> parseBase16 "666f6"
Left "invalid bytestring size"
>>> parseBase16 "666F"
Right "666F"
>>> fmap decodeBase16 (parseBase16 "666F")
Right "fo"
>>> parseBase16 "6x"
Left "invalid character at offset: 1"

Since: 1.0