Це цікаве питання! Як підказує відповідь Ентоні, можна використовувати звичайні підходи до складання незалежної функціональної мови, за умови, що у вас вже є перекладач для оцінки термінів для перевірки типу .
Такий підхід застосовує Едвін Брейді. Зараз це концептуально простіше, але воно втрачає швидкісні переваги компіляції під час перевірки типу. Це було вирішено декількома способами.
По-перше, можна реалізувати віртуальну машину, яка збирає терміни в байт-код на льоту, щоб виконати перевірку перетворення. Це ідея, vm_compute
реалізована в Coq Бенджаміна Грегуара . Мабуть, є і ця теза Дірка Кліблатта з цієї точної теми, але внизу фактичний машинний код, а не віртуальна машина.
По-друге, можна генерувати код на більш звичайній мові, який після його виконання перевіряє всі перетворення, необхідні для перевірки набору відповідної програми. Це означає, що ми можемо використовувати Haskell, скажімо, для перевірки модуля Agda. Код можна компілювати та запустити, і якщо він приймає, тоді код на мові залежного типу можна вважати добре набраним (помилки в реалізації та заборони компілятора). Я вперше почув такий підхід, запропонований Матьє Босфлюгом .
∗
ocamlopt
або GHC :-) (До речі, це підхід Кока та