Создание REPL на Haskell в приложении на Haskell - PullRequest
20 голосов
/ 06 июля 2011

Я пытаюсь внедрить REPL на Haskell в одно из моих приложений на Haskell.Идея заключается в том, что по умолчанию будет загружаться только подмножество библиотек Haskell, плюс мой собственный набор функций, и пользователь будет использовать их для взаимодействия со средой.

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

Есть хороший и чистый способ построить REPL для Haskell, используя Haskell?

1 Ответ

11 голосов
/ 06 июля 2011

Несколько вещей, которые уже существуют:

  • GHCi, конечно, как в смысле возможности взглянуть на то, как он реализован, так и в плане его непосредственного использования (т. Е. Ваш REPL просто говорит с GHCi через stdin / stdout).
  • полный GHC API , который позволяет подключиться к GHC и позволяет ему выполнять всю тяжелую работу за вас - загрузка файлов, поиск зависимостей, анализ, проверка типов и т. Д.
  • подсказка , которая является оболочкой для подмножества GHC API, с упором на интерактивную интерпретацию, а не на компиляцию - что, кажется, соответствует тому, что вы хотите сделать.
  • mueval , оценщик с ограничениями на загруженные модули, использование ресурсов и т. Д., В основном "безопасный" интерактивный режим. Это то, что использует lambdabot, если вы когда-либо были на IRC-канале #haskell.

Все вышеперечисленное предполагает, что вы не хотите заниматься написанием интерпретатора Haskell самостоятельно, что, вероятно, и так.

...