Стратегия удаления сахара из Haskell
-
13-10-2019 - |
Вопрос
Я разрабатываю виртуальную машину для чисто функциональных программ, и я хотел бы иметь возможность тестировать и использовать широкий спектр уже доступных модулей Haskell.Виртуальная машина принимает в качестве входных данных по существу термины из нетипизированного лямбда-исчисления.Мне интересно, что было бы хорошим способом извлечь такое представление из современных модулей Haskell (например.с MPTC, защитой шаблонов и т.д.).Я провел небольшое исследование, и, похоже, еще не существует инструмента, который бы это делал (я был бы рад ошибиться), и это нормально.Я ищу подход.
Ядро GHC кажется слишком ориентированным на работу, тем более что одна из вещей, которые делает виртуальная машина, - это существенное изменение порядка оценки.Существуют ли какие-либо доступные промежуточные представления, которые более точно соответствуют лямбда-исчислению?
Решение
Внешнее ядро для GHC примерно настолько близко к лямбда-исчислению, насколько вы собираетесь получить, используя GHC. Здесь это прямая ссылка на тип выражения, если вы хотите сразу перейти к нему.
- Библиотека для обработки внешних файлов ядра
- Как сделать генерировать внешний сердечник с GHC
- Академический бумага о его использовании
Другие советы
Раньше в EHC был такой поток между представлениями:
HS -> EH -> Ядро -> Ухмылка -> Глупый
Очевидно, что HS - это Haskell, EH менее приторный и используется программой проверки типов, Core - аналог ядра GHC, а Grin и Silly - более низкого уровня.
Существует статья, описывающая архитектуру EHC, написанная Джеруном Фоккером, откуда я позаимствовал приведенное выше, но, вероятно, она устарела (я не знаю, что EHC все еще использует глупое представление).Я думаю, что EHC предоставляет анализаторы и красивые принтеры для каждого из своих внутренних представлений, что было бы удобно.
Есть также York.Core от YHC, о котором, как я видел, люди отзываются более благосклонно, чем о GHC Core, но я не знаю, есть ли способ скомпилировать "современный" Haskell в York.Core.
Хм ... когда -либо слышал о Хаскелл ядра? Я не уверен, что вам нужно. Это какой -то оругалированный Haskell и по существу определяется в отчете Haskell. Я не уверен, это то, что вам нужно.