Стратегия обесцвечивания Haskell

Я разрабатываю виртуальную машину для чисто функциональных программ, и я хотел бы иметь возможность тестировать и использовать большое количество доступных модулей Haskell. VM принимает в качестве входных существенно термины в нетипизированном лямбда-исчислении. Мне интересно, что было бы хорошим способом извлечь такое представление из современных модулей Haskell (например, с MPTC, защитой шаблонов и т.д.). Я сделал небольшое исследование и, похоже, не инструмент, который делает это уже (я был бы рад ошибиться), и все в порядке. Я ищу подход.

Ядро GHC кажется слишком оперативным, особенно потому, что одна из вещей, которую делает VM, - это значительно изменить оценочный порядок. Имеются ли какие-либо доступные промежуточные представления, более близкие к лямбда-исчислению?

Ответ 1

Внешнее ядро ​​для GHC примерно так же близко к исчислению лямбда, как вы собираетесь получить, используя GHC. Здесь есть ссылка прямо на тип выражения, если вы хотите перейти прямо.

Ответ 2

EHC использовал этот поток между представлениями:

HS → EH → Core → Grin → Silly

HS, очевидно, Haskell, EH менее сладкий и используется средством проверки типов, Core - это аналог ядра GHC, а Grin и Silly - более низкий уровень.

Существует статья, описывающая архитектуру EHC от Jeroen Fokker, где я вырезал выше, но, вероятно, устарел (я не знаю, что EHC все еще использует представление Silly). Я думаю, что EHC предоставляет синтаксические анализаторы и симпатичные принтеры для каждого из своих внутренних представлений, что было бы удобно.

Там также York.Core от YHC, который я видел, люди говорят более благоприятно, чем GHC Core, но я не знаю, есть ли способ скомпилировать "современный" Haskell в York.Core.

Ответ 3

Hm... Когда-либо слышал о Ядро Haskell? Я не уверен, что вам нужно. Это своего рода desugared Haskell и по существу определяется в отчете Haskell. Я не уверен, что это то, что вам нужно.