> > > foreign import "nameOfFunction" nameOfFunction > > > :: IO MyType > > > > > Is it possible to write a new MyType and make it allowed as > > > a return type from foreign functions? Is changing the > > > compiler the only way to do that?
> > Of course you're not really returning a MyType but a pointer > > to one. (...) This would solve half my problem. Can I always trust that? I've been told before that everytime a C function returns a struct it is actually returning a pointer, but I wasn't able to find that written in stone so that I can trust it to be valid anywhere Haskell will run and for any return type (like a struct containing just a char, for instance). How does that pointer work? My code didn't provide it to the C function, so, I believe I don't have to deallocate it. Where does the memory it points to live? Did Haskell FFI engine gave that pointer to the C function? How much time is it going to live? Enough so I can 'peek' it? > > Using raw Ptrs is not very nice, so we would usually either > > wrap that in a ForeignPtr or use a Storable instance to get a > > MyType directly. OK. I've instances of Storable for all the appropriate types. > > If do recommend reading the FFI spec. It's quite readable and > > explains a lot of the issues. Sure. It helped a lot. Actually, I've been able to do everything I needed so far with just the spec and Foreign.*. > I would also add the chapter 17 of Real World Haskell. you can > read it here: Nice. It shows unsafePerformIO. Some functions returning structs are side effect free. I'm writing bindings I want to put on hackage, so what do you think would fit better the taste of Haskell programmers: pure functions using unsafePerformIO or IO functions? Thanks, MaurĂcio _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe