[Haskell-cafe] c2hs confusion with a simple function

Jeff Heard jefferson.r.heard at gmail.com
Thu Jul 9 16:45:46 EDT 2009


The c2hs documentation at
http://www.cse.unsw.edu.au/~chak/haskell/c2hs/docu/implementing.html#id314947
 gives me an example to follow for this case:

{#fun notebook_query_tab_label_packing as ^
  `(NotebookClass nb, WidgetClass cld)' =>
  {notebook `nb'                ,
   widget   `cld'               ,
   alloca-  `Bool'     peekBool*,
   alloca-  `Bool'     peekBool*,
   alloca-  `PackType' peekEnum*} -> `()'#}

so I took the original C binding:

   void SHPGetInfo(SHPHandle, int*, int*, double*, double*)

And wrote a c2hs binding:

{#fun SHPGetInfo as getInfo
    { fromSHPHandle `SHPHandle'
    , alloca- `Int'
    , alloca- `Int'
    , alloca- `Double'
    , alloca- `Double'
    } -> `()' #}

The error I get:

Internal.chs:85:2:
    Couldn't match expected type `Int'
           against inferred type `(Ptr b -> IO c) -> IO c'
      Expected type: IO (Int, Int, Double, Double)
      Inferred type: IO
                       ((Ptr b -> IO c) -> IO c,
                        (Ptr b1 -> IO c1) -> IO c1,
                        (Ptr b2 -> IO c2) -> IO c2,
                        (Ptr b3 -> IO c3) -> IO c3)
    In the expression:
          alloca $ \ a2' -> alloca $ \ a3' -> alloca $ \ a4' -> ...
    In the expression:
        let a1' = fromSHPHandle a1
        in alloca $ \ a2' -> alloca $ \ a3' -> alloca $ ...

I've tried ending it with withCIntConv and withCFloatConv to no avail.
 The original c2hs file is attached.  I'm sure there are many more
problems, but this is the one I'm working on at the moemnt...

-- Jeff
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Internal.chs
Type: application/octet-stream
Size: 3634 bytes
Desc: not available
Url : http://www.haskell.org/pipermail/haskell-cafe/attachments/20090709/3b467892/Internal-0001.obj


More information about the Haskell-Cafe mailing list