Я не знаком с недавней работой Барри Джея, но его старая работа включает в себя вещи, которые вы не можете сделать в Лиспе, потому что типы предоставляют дополнительную информацию.
Например, предположим, что вы хотите определить размер структуры данных Lisp. Это 1 для атома, и n для списка из n атомов, и, в более общем случае, размер (x) + размер (y) для (cons x y)
.
Теперь добавьте типы в смесь. Размер списка будет его длина. Каков размер списка списков атомов? Если вы рассматриваете эту структуру данных как список (элементами которого являются списки атомов), ответом будет длина списка. Если вы рассматриваете эту структуру данных как содержащую атомы, которые, как оказалось, хранятся в списке списков, ответом является сумма длин списков элементов.
Типы позволяют различать эти два представления (формы) необработанных данных. Вам нужна система типов, которая позволяет различать (List) (List Atom) и (List List) (Atom). Наиболее распространенная реализация этого различия - с классами типов (как в Haskell).