[Haskell-cafe] ffi and pass by value structs

Federico Squartini federico.squartini at googlemail.com
Wed Jan 30 08:16:01 EST 2008


Is there a way in the foreign function interface to pass to a function
a struct by value? I explain it better.

There are two ways in c to pass structs, as in the following example:

/* begin c code */

struct couple{
  int a;
  int b;
};

//by value
int print_couple (struct couple cpl)
{
  printf("%d\n", cpl.a);
  printf("%d\n", cpl.b);
  return(0);
}

//by address
int print_couple_ptr (struct couple *cpl)
{
  printf("%d\n", cpl->a);
  printf("%d\n", cpl->b);
  return(0);
}

/* end c code */

Apparently in the ffi it is possible to import the second version, as:

foreign import ccall "print_couple_ptr" printCouple::Ptr Couple->IO Int

But not the first, as a struct it's not an atomic type.
So how does one solve this issue?

Cheers,

Federico


More information about the Haskell-Cafe mailing list