Стратегия обесценивания Haskell - PullRequest
10 голосов
/ 29 декабря 2010

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

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

Ответы [ 3 ]

5 голосов
/ 29 декабря 2010

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

3 голосов
/ 29 декабря 2010

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

HS -> EH -> Core -> Grin -> Silly

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

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

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

1 голос
/ 29 декабря 2010

Хм ... Вы когда-нибудь слышали о ядре Haskell ?Я не уверен, что тебе нужно.Это некий подобный Haskell, и он определен в отчете Haskell.Я не уверен, что это то, что вам нужно.

...