从Java中调用Haskell函数的最佳方法

时间:2010-01-26 17:15:37

标签: java haskell ffi

我正在寻找一种在Java程序中执行Haskell函数的有效方法。我已经考虑过使用exec()与GHC进行交互,但似乎应该有更好的方法。

4 个答案:

答案 0 :(得分:13)

我通常避免使用JNI类型的方法来跨运行时/语言进行链接。他们只有太多陷阱而且上涨空间很小。我发现跨越流程边界更容易。虽然我从未尝试过使用Haskell和Java,但它们都有支持XML RPC的库,这听起来很适合你正在做的事情。所以:将Haskell程序设置为“服务”,并在需要时调用它的函数。

答案 1 :(得分:11)

我假设您知道如何从Java调用C语言?如果是这样,那么你可以按照FFI指南从C调用Haskell,从Java调用C,创建一个桥。这是本地调用,可能需要对链接器进行一些调整。

有关从C调用Haskell的详细信息,请访问:http://www.haskell.org/haskellwiki/Calling_Haskell_from_C

或者,您可以考虑使用RPC服务器。

答案 2 :(得分:2)

请参阅Haskell wiki上的Interfacing with other languages: Java

答案 3 :(得分:2)

我能想到的最简单的方法:在一个单独的过程中启动hint。作为一个快速演示,一些愚蠢的事情

import Control.Monad
import Language.Haskell.Interpreter
main = getContents >>= mapM_ (eval >=> print) . lines

可以在stdin上提供表达式,并在stdout上给出字符串结果。当然,要确保这是安全的,还需要做更多的工作。

(错误,假设Java具有某种popen2-ish功能。否则你可以在套接字上做同样的事情。)