(describe thing ...)

Behold, for I have summoned a great horror: Heresy now supports Things.

Things are immutable, self-copying opaque data structures.

To describe a new kind of Thing: (describe *name* (field default-value)
...)

Describing a thing creates an anonymous function type that returns
itself unless acted upon by calling it with arguments. You can call a
thing's values by doing (thing 'field) which returns the value
associated with that field.

You can copy a thing with new values by passing it a quoted pattern
list, matching the order of the fields of the Thing. A * in the pattern
copies the same value, a value changes that value in the resulting copy.
So (thing '(* * pie) changes the third field to 'pie' in the resulting
copied Thing.

Calling a thing with no arguments returns the naked data structure
itself in the form of an alist.

Things are first class values (because they are lambdas internally), and
you can thus assign a thing a name just as you can a lambda and call
that name with the same expected arguments as its parent.