Ptr and ForeignPtr Questions

Ashley Yakeley ashley@semantic.org
Sun, 23 Sep 2001 23:54:26 -0700


At 2001-09-23 23:12, Manuel M. T. Chakravarty wrote:

>> I was just hoping for GHC to be able to spit out headers for 'foreign 
>> import' functions that the user could then define. This merely means a 
>> map from some restricted set of Haskell function types to C types.
>
>Functionality like that is not part of the FFI.  However, it
>would surely be possible to write an extra tool that
>accomplishes just what you want.  (It was a general design
>rule to avoid in the basic FFI features that would be
>complicated to define/implement and can as easily be
>implemented by a tool.)

Right. This would be very similar to the 'javah' tool used in the Java 
world. That works on compiled .class files, I suppose the equivalent 
would be a module that "plugged in" to the GHC "motherboard".

>Moreover, the case where you bind to existing C functions is
>much more common than where you bind to C functions that you
>have written yourself.  

Right, but it's a more ambitious goal for the FFI designer, at least if 
they want to do it completely. As you point out, there are restrictions 
on just what existing C functions you can bind to. If your function looks 
like this:

     const char* foo (struct SomeLinkedList*);

...you have no choice but to write 'impedance-matching' code for that 
function.

>structs are not allowed as arguments to foreign imported
>functions.

Exactly! And neither are const pointers. But argument const-ness, at 
least, can be safely ignored.

-- 
Ashley Yakeley, Seattle WA