
Hello, I've just started writing bindings to the Enlightenment Foundation Libraries, using c2hs. I've run into the following problem with the types in the foreign import declarations generated. In Imlib2.h, there is a function prototype: int imlib_get_visual_depth(Display * display, Visual * visual); In Imlib.chs, I have (among other things) import qualified Graphics.X11.Xlib.Types as Xlib -- ... {# fun imlib_get_visual_depth as getVisualDepth { id `Xlib.Display', id `Xlib.Visual' } -> `Int' #} I run: c2hs -k /usr/local/include/Imlib2.h Imlib.chs and in the resulting Imlib.hs, I get: --- this part is correct: getVisualDepth :: Xlib.Display -> Xlib.Visual -> IO (Int) getVisualDepth a1 a2 = let {a1' = id a1} in let {a2' = id a2} in getVisualDepth'_ a1' a2' >>= \res -> let {res' = cIntConv res} in return (res') --- this part is not: foreign import ccall safe "Imlib.h imlib_get_visual_depth" getVisualDepth'_ :: ((Ptr ()) -> ((Ptr ()) -> (IO CInt))) Why did it choose the type Ptr (), when I gave the type Xlib.Display? I could do an additional cast, but it will get tedious, as I have a lot of functions to import, and there shouldn't be any need for it anyway. As this is, it doesn't typecheck at all. If by hand, I change it to read: foreign import ccall safe "Imlib.h imlib_get_visual_depth" getVisualDepth'_ :: Xlib.Display -> Xlib.Visual -> IO CInt (which is what I expected it to produce in the first place) then it works as expected. Am I making a grievous error, or is this a bug/lack of a feature? - Cale