JSON Types

The type to which we encode Haskell values. There's a set
of primitives, and a couple of heterogenous collection types.

Objects:

An object structure is represented as a pair of curly brackets
surrounding zero or more name/value pairs (or members). A name is a
string. A single colon comes after each name, separating the name
from the value. A single comma separates a value from a
following name.

Arrays:

An array structure is represented as square brackets surrounding
zero or more values (or elements). Elements are separated by commas.