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.

1

3 Answers 3

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.

Sign up to request clarification or add additional context in comments.

1 Comment

And there are reasonable xml-rpx libraries, hackage.haskell.org/package/haxr
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.

Comments

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.