Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

making standalone toplevels with OCaml and Haskell

In Common Lisp, programs are often produced as binaries with a translator bundled inside. StumpWM is a good example.

How would one do the same with Haskell and OCaml?

It is not necessary to provide a debugger as well, as Common Lisp does, the aim is to make extensions while not depending on the whole translator package ( xmonad which requires GHC ).

P.S. I know about ocamlmktop, and it works great, except I don't really get why it requires "pervasives.cmi" and doesn't bundle it with the binary. So, best thing I can do is mycustomtoplevel -I /path/to/dir/with/pervasives.cmi/. Any way to override it?

like image 674
vitus Avatar asked Dec 19 '10 10:12

vitus


2 Answers

This isn't really possible for (GHC) Haskell - you would either need to to ship the application binary + GHC so you can extend via GHC-API, or embed an extension language. I don't think there are any "off-the-shelf" extension languages to embed in Haskell at the moment, though HsLua might be close. This is a bridge to the the standard (C source) Lua. There was a thread on Haskell-cafe last month about extension languages written in Haskell, I think the answer was 'there aren't any'.

http://www.haskell.org/pipermail/haskell-cafe/2010-November/085830.html

like image 65
stephen tetley Avatar answered Nov 11 '22 15:11

stephen tetley


With GHC, there is GHC-API, which allows you to embed ghci-like interpreters in your program. It's a quite low-level and often changing library, since it simply provides access to GHC internas.

Then, there is Hint, a library which aims to encapsulate ghc-api behind a well designed and more stable interface.

Nevertheless, I've recently switched from using either of these packages to using an external ghci. The external ghci process is controlled via standard input/output pipes. This change made it easy to stay compatible with GHC 6.12.x and 7.0.x, while our ghc-api code broke with GHC 7.x and hint didn't work out of the box either. I don't know whether there is a new version of hint available, which works with GHC 7.

like image 43
jmg Avatar answered Nov 11 '22 14:11

jmg