Ptr and ForeignPtr Questions
Manuel M. T. Chakravarty
chak@cse.unsw.edu.au
Mon, 24 Sep 2001 12:21:20 +1000
Ashley Yakeley <ashley@semantic.org> wrote,
> At 2001-09-23 04:04, Marcin 'Qrczak' Kowalczyk wrote:
>
> >It would be impossible then to directly call a C function with a
> >parameter declared as a const pointer. It's illegal in C to have
> >mismatching prototypes of the same function.
>
> You can always do this:
>
> module MyModule where
> {
> foreign import StringCopy :: Ptr Int8 -> Ptr Int8 -> IO ();
> }
>
> which autogenerates this header:
>
> extern "C"
> {
> void MyModule__StringCopy(signed char* a,signed char* b);
> }
>
> which the user can implement like this:
>
> char* strcat(char* dest, const char* src);
>
> void MyModule__StringCopy(char* dest,char* src)
> {
> strcat(dest,src);
> }
>
> (assuming char and signed char are identical).
If you are writing a Haskell binding to a large C library
that has hundreds of functions, it is extremely unattractive
to write "impedance matchers" like `MyModule__StringCopy'
manually.
Manuel