Насчёт INTEGER вряд ли это будет так просто, т.к. у него нет тега типа. В лиспе, как правило, любой объект знает свой тип, зато размер FIXNUM (аналог INTEGER) - меньше машинного слова на 1-4 бита. Поскольку тег типа в лиспе - это переменное число бит в машинном слове. В ББЦБ, если я правильно понимаю, только Block знает свой тип. Обычная запись и массив - это Block. А вот значения элементарных типов и untagged записей известны только из контекста - из статически известного типа переменной, в которой они хранятся.
Это пока - всего лишь моя гипотеза. Можно ли динамически (зная только адрес) отличить массив от записи? Этого я тоже не знаю. Ключ к тому, чтобы узнать - понять работу Kernel.Mark, или найти описание. Ваши комментарии приветствуются.
Если моя гипотеза верна, то реализация типа ANY выходит за рамки моих наличных временных ресурсов, поэтому я об этом и не пишу