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