Cxx foreign function interface
Foreign Function Interfaces to C++ Libraries
Foreign function interfaces (FFIs) from Haskell to C are well developed, but writing an FFI to a C++ library remains a difficult undertaking. In general, the Haskell FFI apparatus specifies how to call a function (not a method) using the "ccall" calling mechanism used for C programs. The FFI specification (** need link) mentions, but does not require, an alternative calling mechanism for C++; no Haskell compiler has ever implemented this. Extra complications arise in interfacing to C++ libraries:
- A C++ program allows overloading, using the same function name with different argument lists. But at the binary level, each different version of the function must have its own name. The C++ compiler "mangles" the function names to differentiate them.
- A C++ program may have classes with constructors, destructors, and methods. These are, obviously, not quite the same as functions, and have no obvious counterpart in Haskell.
- Template functions, template classes, etc.
Here are some approaches to building interfaces to C++:
- IO_inside describes how to interface to a C++ library using the "export C" declaration (in C++) which makes it look like a C library. This seems to be the standard technique for briding the gap between Haskell and C++.
- CPlusPlus_from_Haskell describes "the hard way" of interfacing to C++, using the mangled C++ names directly without using "export C". It also suggests the possibility of a more automated approach using gcc-xml.
- Hacanon automatically generates an FFI to C++ using Template Haskell (?), but it is unmaintained and its author seems dissatisfied with it.
- Need link
- The HQK project reports having developed a small Haskell module, qoo, for accessing object-oriented libraries conveniently.