在Common Lisp中,程序通常作为二进制文件生成,其中包含一个转换器。 StumpWM就是一个很好的例子。
如何使用Haskell和OCaml做同样的事情?
没有必要像Common Lisp一样提供调试器,目的是在不依赖于整个翻译包(xmonad需要GHC)的情况下进行扩展。
P.S。我知道ocamlmktop,它工作得很好,除了我不知道为什么它需要“pervasives.cmi”并且不将它与二进制文件捆绑在一起。所以,我能做的最好的事情是mycustomtoplevel -I /path/to/dir/with/pervasives.cmi/。有什么方法可以覆盖它吗?
答案 0 :(得分:5)
这对于(GHC)Haskell来说实际上是不可能的 - 您需要发送应用程序二进制文件+ GHC,以便您可以通过GHC-API进行扩展,或者嵌入扩展语言。我不认为现在有任何“现成的”扩展语言可以嵌入Haskell,尽管HsLua可能会很接近。这是标准(C源)Lua的桥梁。上个月在Haskell-cafe上有一个关于用Haskell编写的扩展语言的帖子,我认为答案是'没有任何'。
http://www.haskell.org/pipermail/haskell-cafe/2010-November/085830.html
答案 1 :(得分:2)
使用GHC,有GHC-API,它允许您在程序中嵌入类似ghci的解释器。它是一个相当低级且经常变化的库,因为它只是提供对GHC内部的访问。
然后,有Hint,这是一个旨在将ghc-api封装在设计良好且更稳定的界面后面的库。
尽管如此,我最近已经从使用这些软件包切换到使用外部ghci。外部ghci过程通过标准输入/输出管道控制。这一变化使得与GHC 6.12.x和7.0.x保持兼容变得容易,而我们的ghc-api代码与GHC 7.x打破了,并且提示也没有开箱即用。我不知道是否有新版本的提示可用,它适用于GHC 7.
答案 2 :(得分:1)
对于Ocaml,您是否尝试过使用findlib?请参阅自定义Toploops 部分。