В общем, идея такая. На языке пишется некоторая структура данных типа struct в C++, но без разделения compile-time и run-time. То есть в структуре можно хранить не только значения, но и типы. Таким образом, можно составлять выражения из типов и даже существуют типы высоких порядков - типы типов типов и т.п. Например встроенный тип высшего порядка - это type. Тип struct является его экземпляром. Экземпляром типа struct является определение структуры, как в Си. Экземпляром этого типа является собственно экземпляр структуры - значение.