FFI

Sven Panne Sven_Panne@BetaResearch.de
Wed, 16 Jan 2002 08:52:04 +0100


Manuel M. T. Chakravarty wrote:
> I think, there are five options:
> 
> * H/Direct (you mentioned that already)
> * GreenCard (ditto)
> * C->Haskell
>   http://www.cse.unsw.edu.au/~chak/haskell/c2hs/
> * hsc2hs (comes with GHC)
> * Plain FFI

Plus:

  * Write your own IDL compiler for a given formal description of an API

This sounds a little bit like overkill at first, but at least for my
never-ending HOpenGL project it makes a lot of sense: There is a rather
large (maintained!) description of the OpenGL API (plus a few more things
like GLX) at

   http://oss.sgi.com/cgi-bin/cvsweb.cgi/projects/ogl-sample/main/doc/registry/specs/

which could be used to generate header files, network code for GLX, stubs,
etc. (and of course a low-level Haskell binding :-)  Of course one could hack
H/Direct in a way that it understands these .spec files, but a home-grown
compiler was the easier and more tunable way. I hope to release a new
version of HOpenGL based on this "soon".   :-}

SimonM has written a small program/hack to auto-generate something for GTK+,
IIRC, so I'm probably not alone on this route...

I agree with Koen on his points:

   * Plain FFI plus a few combinators is not so bad at all for small to
     medium-sized bindings. Only the mapping of Haskell enumerations to
     C enums/ints and back is *really* boring...

   * No tool whatever generates a Haskellish binding one wants to present
     to an end user, so a wrapper around the lower Haskell level is
     necessary, anyway.

Manuel: Could the results/opinions of this thread added somewhere? I'm not
sure where, the libraries/tools page of haskell.org is a possibility, but
your page could be used, too.

Cheers,
   S.
-- 
Sven Panne    Fon: +49/89/99567000    Fax: +49/89/99567461
BetaResearch GmbH,    Betastr. 1,    D-85774 Unterfoehring
mailto:Sven_Panne@BetaResearch.de    http://www.betaresearch.de