// Here, "simple" means "easy to print in C"
//    lowercase     uppercase     simple  description          abbr char
_TYPE(string,       STRING,       true,   "string",            's')
_TYPE(number,       NUMBER,       true,   "number",            'n')
_TYPE(symbol,       SYMBOL,       true,   "symbol",            'y')
_TYPE(opcode,       OPCODE,       true,   "opcode procedure",  'o')
_TYPE(pair,         PAIR,         false,  "pair",              '.')
_TYPE(closure,      CLOSURE,      true,   "closure/procedure", '^')
_TYPE(continuation, CONTINUATION, true,   "continuation",      '?')
_TYPE(foreign,      FOREIGN,      true,   "foreign procedure", '@')
_TYPE(character,    CHARACTER,    true,   "character",         'c')
_TYPE(port,         PORT,         true,   "port",              'p')
_TYPE(vector,       VECTOR,       false,  "vector",            'v')
_TYPE(macro,        MACRO,        true,   "macro transformer", '`')
_TYPE(promise,      PROMISE,      true,   "promise",           '!')
_TYPE(environment,  ENVIRONMENT,  false,  "environment",       'e')
_TYPE(bvector,      BYTEVECTOR,   false,  "bytevector",        '8')
// Why is it "simple"? Because it prints simple
_TYPE(struct,       STRUCT,       true,   "structure/record",  '$')
_TYPE(parameter,    PARAMETER,    true,   "parameter",         ':')
_TYPE(boolean,      BOOLEAN,      true,   "boolean",           'b')
_TYPE(null,         NULL,         true,   "null list",         '0')
_TYPE(error_object, ERROBJECT,    true,   "error object",      'x')
_TYPE(pointer,      POINTER,      true,   "foreign pointer",   '&')
#undef _TYPE
