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