Allowing a type to be exposed to Lisp, where its values appear as opaque objects, or "embedded
user pointers" (printed as
When a (boxed) value of this type is transferred to Lisp, the GC becomes its owner. Afterwards, module code can only access it through immutable references.
Returns the name of this type. This is used to report runtime type error, when a function expects this type, but some Lisp code passes a different type of "user pointer".
Finalizes a value. This is called by the GC when it discards a value of this type. Module
code that needs custom destructor logic should implement
Drop, instead of overriding
This function also serves as a form of runtime type tag.