Без заголовка
Вот тут моя не понимайт. Language и kernel обычно это класс-член, операция "порождение" (язык порождает ядро, ядро написано на языке). А language kernel, на котором record type, sum type, function -- это я не понимаю, что за зверь. В Forth нет ни language, ни kernel, а просто ядро интерпретатора, на котором можно дальше писать. Это просто другой способ определять язык: иметь минимальный интерпретатор, который потом можно расширять. И тут нужно договориться, как это описывать: как описывать те свойства языка, которые позволяют его штатно расширять.
Но общая идея совпадает: сначала учим язык говорить Hello world, а потом начинаем его расширять так, чтобы становилось возможным описывать внешний мир. Это означает, что в каком-то месте нужно либо декларировать, что type языка это entity во внешнем мире (соответствует насосу) -- это когда language и kernel неразличимы, либо что entity во внешнем мире как-то (паттернами, например) представим через type (это когда kernel пишется на language).
Без примеров (хотя бы ссылок на примеры в других знакомых стеках языков) и подробных разбирательств дальше не разобраться. Мы оба говорим намёками, увы.