[C2hs] c2hs seems to ignore the types I give it when
generating foreign import declarations
Duncan Coutts
duncan.coutts at worc.ox.ac.uk
Sat Nov 26 05:59:21 EST 2005
On Sat, 2005-11-26 at 00:55 -0500, Cale Gibbard wrote:
> 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?
You need to tell c2hs about the relationship between C types and Haskell
types.
http://www.cse.unsw.edu.au/~chak/haskell/c2hs/docu/c2hs-3.html#ss3.10
You'll want to add something like:
{# pointer *Display -> Display #}
{# pointer *Visual -> Visual #}
Note that c2hs doesn't yet accept qualified names like:
{# pointer *Display -> Xlib.Display #}
Duncan
More information about the C2hs
mailing list