
Hey, I am trying to write FFI bindings for a C++ class structure. There is a base class with a bunch of (virtual) functions: class Base { virtual void func1(); virtual void func2(); } Now I have many classes that derive from the base class, and I want to be able to call func1 and func2 on them. But I do not want to write an ffi function for every derived object and every virtual function in base class. So I am trying: data DerivedStruct type Derived = Ptr DerivedStruct class BaseFunc a instance BaseFunc DerivedStruct foreign import ccall "callBaseFunc1" func1 :: BaseFunc a => Ptr a -> IO () ghc gives me: Unacceptable result type in foreign declaration: BaseFunc a => Ptr a -> IO () When checking declaration: foreign import ccall safe "static callBaseFunc1" func1 :: BaseFunc a => Ptr a -> IO () a) I do not get the error message. The return type is acceptable? Why is IO () not acceptable? b) How can I structure this? Thanks! Nathan