Best way to call Haskell functions from within Jav

2019-01-23 03:15发布

I'm looking an efficient way of executing Haskell functions from within a Java program. I've considered the use of exec() to interact with GHC, but it seems like there should be a better method.

标签: java haskell ffi
4条回答
Deceive 欺骗
2楼-- · 2019-01-23 03:25
Rolldiameter
3楼-- · 2019-01-23 03:35

I assume you know how to call C from Java? If so, then you can follow the FFI guide to call Haskell from C, and C from Java, creating a bridge. This is a native call, and may require some fiddling with linkers.

Details on calling Haskell from C are here: http://www.haskell.org/haskellwiki/Calling_Haskell_from_C

Alternatively, you might consider an RPC server.

查看更多
贼婆χ
4楼-- · 2019-01-23 03:42

I usually avoid JNI-type approaches to linking across runtimes/languages. They just have too many gotchas and little upside. I find it easier to work across process boundaries. While I've never tried it with Haskell and Java, they both have libraries that support XML RPC, and it sounds like a natural fit for what you're doing. So: set up a Haskell program as a "service" and just call its functions when you need them.

查看更多
Bombasti
5楼-- · 2019-01-23 03:46

Easiest way I can think of: start up hint in a separate process. As a quick demonstration, something dumb like

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

can be fed expressions on stdin and will give stringy results on stdout. Of course, it'll take a little more work to make sure this is safe.

(Err, assuming Java has some sort of popen2-ish functionality. Otherwise maybe you can do the same over sockets.)

查看更多
登录 后发表回答