| Maintainer | Leon P Smith <leon@melding-monads.com> |
|---|
Data.Json.Builder.Internal
Description
Internal bits. By using the constructors provided in this module, you can break the abstraction that json-builder provides and emit invalid JSON syntax. Also, this module is not as stable as the public interface and can change at any time.
Documentation
The Json type represents valid json syntax. It cannot be directly
analyzed, however it can be turned into a Builder via toBuilder,
a (lazy) ByteString via toJsonBS or toJsonLBS, or used as a component
of a json Array or json Object using element or row.
The Object type represents syntax for a json object. It has a singleton
constructor row, and an instance of Monoid, so that mempty represents the
empty object and mappend concatinates two objects. Arbitrary objects can
be constructed using these operators.
Note that duplicate field names will appear in the output, so it is up to the user of this interface to avoid duplicate field names.
Constructors
| Object CommaMonoid |
The Array type represents syntax for a json array. It has been given
a singleton constructor element and an instance of Monoid, so that
mempty represents the empty array and mappend concatinates two arrays.
Arbitrary arrays can be constructed using these operators.
Constructors
| Array CommaMonoid |
The Value typeclass represents types that can be rendered
into valid json syntax.
Instances
| Value Bool | renders as |
| Value Double | |
| Value Float | |
| Value Int | |
| Value Int8 | |
| Value Int16 | |
| Value Int32 | |
| Value Int64 | |
| Value Integer | |
| Value Word | |
| Value Word8 | |
| Value Word16 | |
| Value Word32 | |
| Value Word64 | |
| Value () | renders as |
| Value Text | |
| Value Text | |
| Value ByteString | |
| Value ByteString | |
| Value Array | |
| Value Object | |
| Value Escaped | |
| Value Json | |
| Value [Char] | |
| Value a => Value [a] | renders as an |
| (JsString k, Value a) => Value (Map k a) | renders as an |
| (JsString k, Value a) => Value (HashMap k a) | renders as an |
The Escaped type represents json string syntax. The purpose of this
type is so that json strings can be efficiently constructed from multiple
Haskell strings without superfluous conversions or concatinations.
Internally, it is just a Builder value which must produce a UTF-8 encoded
bytestring with backslashes, quotes, and control characters appropriately
escaped. It also must not render the opening or closing quote, which
are instead rendered by toJson.
class Value a => JsString a whereSource
The JsString typeclass represents types that can be render into json string
syntax. They are special because only strings can appear as field names
of json objects.
data CommaMonoid Source
A CommaMonoid inserts commas between builders. In order to
satisify the Monoid identity laws, Empty must be distinguished
from . To demonstrate the difference:
Comma mempty
mconcat ["foo", Comma mempty, "bar"] == "foo,,bar" mconcat ["foo", Empty , "bar"] == "foo,bar"
Note that this example abuses notation somewhat, treating Builders as
strings using the injection fromString = Comma . fromString
Instances