[Haskell-cafe] FunPtr error?

Ryan Ingram ryani.spam at gmail.com
Tue Jun 10 14:23:36 EDT 2008


Also, if you always plan to partially apply your notification function
and you just want a simple callback:

void (*pCallbackFn)(void);

You should be able to do something like this:

> type Callback = IO ()
> foreign import ccall "wrapper" mkCallback :: Callback -> IO (FunPtr Callback)

You can then do something like

> main = do
>    let event = Sigval { ... fill in here ... }
>    callback <- mkCallback (notify event)
>    ...
>    freeHaskellFunPtr callback


On 6/10/08, Ryan Ingram <ryani.spam at gmail.com> wrote:
> I'm not super experienced with the FFI (foreign function interface); I
> only used C types that you can get from #include <HsFFI.h>, like
> Word32.
>
> You might need to make Sigval an instance of Storable, or do some
> magic with ForeignPtrs.  Good luck! :)
>
>  -- ryan
>
>
> On 6/9/08, Galchin, Vasili <vigalchin at gmail.com> wrote:
> > I have tried various things to no avail ....
> >
> > vigalchin at ubuntu:~/FTP/Haskell/unix-2.2.0.0/tests/timer$
> > runhaskell Setup.lhs build
> > Preprocessing executables for Test-1.0...
> > Building Test-1.0...
> > [1 of 1] Compiling Main             ( ./timer.hs,
> > dist/build/timer/timer-tmp/Main.o )
> >
> > ./timer.hs:22:0:
> >     Unacceptable argument type in foreign declaration: Sigval
> >     When checking declaration:
> >         foreign import ccall safe "wrapper" mkNotify
> >           :: Notify -> IO (FunPtr Notify)
> >
> > => here is my Sigval def
> >
> > data Sigval = SivalInt Int | SivalPtr (Ptr Char)
> >
> > I did a find/grep for "Unacceptable argument" in the ghc compiler source and
> > assuming no typo I didn't find. ??
> >
> > Thanks.
> >
> > Kind regards, Vasili
> >
> >
> >
> >
> > On Mon, Jun 9, 2008 at 11:25 PM, Judah Jacobson <judah.jacobson at gmail.com>
> > wrote:
> >
> > > 2008/6/9 Galchin, Vasili <vigalchin at gmail.com>:
> > >
> > > > Ryan,
> > > >
> > > >      I tried but the compiler didn't seem to like the keyword "import":
> > > >
> > > >
> > vigalchin at ubuntu:~/FTP/Haskell/unix-2.2.0.0/tests/timer$
> > runhaskell
> > > > Setup.lhs build
> > > > Preprocessing executables for Test-1.0...
> > > > Building Test-1.0...
> > > > [1 of 1] Compiling Main             ( ./timer.hs,
> > > > dist/build/timer/timer-tmp/Main.o )
> > > >
> > > > ./timer.hs:29:8: parse error on input `import'
> > > >
> > >
> > > Hi Vasili,
> > >
> > > To fix that error, you probably just need to add the line "Extensions:
> > > ForeignFunctionInterface" to the .cabal file.   (That is the
> > > equivalent of calling ghc by itself with the command-line arguments
> > > -fffi or -XForeignFunctionInterface.)
> > >
> > > Hope that helps,
> > > -Judah
> > >
> >
> >
>


More information about the Haskell-Cafe mailing list