Lisp обладает свойством быть homoiconic , то есть представление кода, используемого языковой реализацией (списками), также доступно и идиоматически используется программами, которые хотят представлять код для своих собственные цели.
Другое основное семейство функциональных языков программирования, ML, основано на теории типов, что означает, что языковая реализация требует более сложного представления кода, а также менее небрежно относится к тому, что вам разрешено делать, поэтому обычно внутреннее представление недоступно для программ. Например, средства проверки корректности для логики высшего порядка часто реализуются на языках семейства ML, но обычно реализуют свою собственную систему теории типов, фактически игнорируя тот факт, что компилятор ML уже имеет такую систему.
Есть ли исключения из этого? Какие-нибудь языки программирования, основанные на теории типов, которые предоставляют представление своего кода для программного использования?