Создание Haskell REPL в приложении Haskell

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

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

Есть ли хороший и чистый способ создать REPL для Haskell с помощью Haskell?


person CharlieP    schedule 05.07.2011    source источник
comment
Подходит ли вам использование библиотек GHC? (Они предоставляют множество способов взаимодействия с скомпилированным кодом Haskell)   -  person fuz    schedule 06.07.2011
comment
Да, это вариант, но у меня нет опыта их использования. Можете ли вы указать мне правильные библиотеки, чтобы я мог взглянуть на них?   -  person CharlieP    schedule 06.07.2011
comment
Как насчет того, чтобы взглянуть на haskell.org?   -  person fuz    schedule 06.07.2011
comment
@CharlieP: Вы можете взглянуть на пакет подсказок.   -  person hammar    schedule 06.07.2011
comment
+1 Хороший вопрос. Я бы определенно поддержал ответ на этот вопрос с рабочим примером кода.   -  person Dan Burton    schedule 06.07.2011


Ответы (1)


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

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

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

person C. A. McCann    schedule 05.07.2011