создание автономных уровней с OCaml и Haskell - PullRequest
9 голосов
/ 19 декабря 2010

В Common Lisp программы часто создаются в виде двоичных файлов с переводчиком внутри.StumpWM - хороший пример.

Как можно поступить так же с Haskell и OCaml?

Не нужно также предоставлять отладчик, как это делает Common Lisp, цель состоит в том, чтобы сделатьрасширения, не зависящие от всего пакета переводчика (xmonad, который требует GHC).

PS Я знаю о ocamlmktop, и он прекрасно работает, за исключением того, что я действительно не понимаю, почему он требует "pervasives.cmi" ине связывайте это с бинарным.Итак, лучшее, что я могу сделать, это mycustomtoplevel -I /path/to/dir/with/pervasives.cmi/.Есть ли способ переопределить это?

Ответы [ 3 ]

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

Это не возможно для (GHC) Haskell - вам нужно либо отправить двоичный файл приложения + GHC, чтобы вы могли расширяться через GHC-API, либо встроить язык расширения.Я не думаю, что есть какие-либо "готовые" языки расширения для встраивания в Haskell на данный момент, хотя HsLua может быть близко.Это мост к стандартной (источник C) Lua.В прошлом месяце на Haskell-cafe была ветка о языках расширения, написанных на Haskell, я думаю, что ответ был «их нет».

2 голосов
/ 21 декабря 2010

С GHC есть GHC-API, который позволяет вам встраивать ghci-подобные интерпретаторы в вашу программу. Это довольно низкоуровневая и часто меняющаяся библиотека, так как она просто предоставляет доступ к GHC internas.

Затем существует Hint , библиотека, которая стремится инкапсулировать ghc-api в хорошо разработанный и более стабильный интерфейс.

Тем не менее, я недавно переключился с использования любого из этих пакетов на использование внешнего ghci. Внешний процесс GHCI контролируется через стандартные каналы ввода / вывода. Это изменение позволило легко поддерживать совместимость с GHC 6.12.x и 7.0.x, в то время как наш код ghc-api не работал с GHC 7.x, и подсказка также не работала из коробки Я не знаю, доступна ли новая версия подсказки, которая работает с GHC 7.

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

Для Ocaml, вы пытались использовать findlib ? См. Раздел Пользовательские циклы .

...