Ion query language

Given a Ion tree, produce a subset.

projecting: any <seq> can be indexed by (a list of) keys

Seq-wrappers like map, list are "transparent":

let x = {a, b, c}           // implicit keys equal to values
let y = [a, "b", 1]
let z = {0=zero, 1=one, zero=0, one=1}

// indexing
x.a     // => .a
x[.a]   // => .a
x[.a, .b]   // => {.a, .b}

x[0]    // => _, bottom, a value that cannot be stored at runtime.
y[.a]   // => _
y[0]    // => .a
// TODO: tuples, "the default value":
()      // no values inside
(a)     // implicity a pair `a = a`, but must evaluate to `a`, how?

filtering?

TODO: looks at Haskell optics