Ryan,

     I tried but the compiler didn't seem to like the keyword "import":

vigalchin@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'


.... source ...:

module Main where

import System.Posix
import Foreign
import Foreign.C
import Foreign.Ptr

type Notify = Sigval -> IO ()

main = do

         notifyFPtr <- mkNotify notifyFunc

         let event = Sigevent{sigevFunction=notifyFPtr}

         timerId <- timerCreate Clock_Realtime Nothing

         timerDelete timerId

         return ()

notifyFunc :: Sigval -> IO ()
notifyFunc sigval = do
   putStrLn "timer POP!!!!!!!"
   return ()


foreign import ccall "wrapper"
   mkNotify :: Notify -> IO (FunPtr Notify)
~    

Everything looks ok to me. ??

Regards, Vasili

On Mon, Jun 9, 2008 at 2:16 PM, Ryan Ingram <ryani.spam@gmail.com> wrote:
> type Notify = Sigval -> IO ()
> foreign import ccall "wrapper" mkNotify :: Notify -> IO (FunPtr Notify)

then
> main = do
>    notifyFPtr <- mkNotify notifyFunc
>    -- rest of code here
>
>    -- then, when you are done and nothing is referencing the pointer any more
>    freeHaskellFunPtr notifyFPtr

On 6/9/08, Galchin, Vasili <vigalchin@gmail.com> wrote:
> In any case, what I want to do is store FunPtr in  a data type and marshall
> into a C struct as a C function pointer.
>
> Vasili

This will be suitable for that purpose.

 -- ryan