-- !!! Test that we can call a foreign import "wrapper" using foreign -- import "dynamic", in both IO and non-IO flavours. import Foreign import Foreign.C type IOF = Int -> IO Int type F = Int -> Int foreign import ccall "wrapper" wrap_f :: F -> IO (FunPtr F) foreign import ccall "wrapper" wrap_f_io :: IOF -> IO (FunPtr IOF) foreign import ccall "dynamic" f :: FunPtr F -> F foreign import ccall "dynamic" f_io :: FunPtr IOF -> IOF double :: Int -> Int double x = x * 2 double_io :: Int -> IO Int double_io x = return (x * 2) main = do double1 <- wrap_f double print (f double1 42) double2 <- wrap_f_io double_io x <- f_io double2 42 print x