Best way to call Haskell functions from within Java
Asked Answered
A

3

22

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.

Actor answered 26/1, 2010 at 17:15 Comment(1)
Here's one more way: #10370677Lactescent
A
14

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.

Adigun answered 27/1, 2010 at 4:5 Comment(1)
And there are reasonable xml-rpx libraries, hackage.haskell.org/package/haxrEntozoon
E
12

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.

Entozoon answered 26/1, 2010 at 18:48 Comment(0)
E
2

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.)

Exasperate answered 27/1, 2010 at 3:35 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.