See the pamphlet for an overview of the potion syntax and data structures.

an ordered list
a hash
but with list syntax
a nested data structure, i.e. named hash. the keys are called path.

Every lick can have a name, a table of attributes, and a list of
children. The list of children can, instead, be a Potion data
type, such as a number or string or something.

key of a lick, an instance variable of an object.

Paths cannot be randomly added to the object after the object
is created. Each object has a strict set of paths. Every path
which is used in the constructor is added to the object upon

A variable in an upper scope.

Since a closure doesn’t have access to the registers
of another function, these variables are passed
as pointers (the PNWeakRef struct.)

potion named the main interp object Lobby, which holds the
methods about, here, exit, self, …
p2 renames it to "P2"
potion/p2 uses the cola mop
with 5 core functions: addMethod, lookup, allocate, delegated and intern.
And 4 native (and jitted) VM ops: SELF, CLASS, BIND and MSG.
the mixin type. A mixin is created with potion_type_new() referencing a parent type, and are handled with PN_FLEX macros.