bindings-common-0.1: src/Bindings/Utilities.hs
module Bindings.Utilities (
GlobalVariable, setGlobalVariable, getGlobalVariable,
Callback(..)
) where
import Foreign
import Foreign.C
import Data.Int
newtype (Storable a) => GlobalVariable a = GlobalVariable (Ptr a)
setGlobalVariable :: (Storable a) => GlobalVariable a -> a -> IO ()
setGlobalVariable (GlobalVariable p) v = poke p v
getGlobalVariable :: (Storable a) => GlobalVariable a -> IO a
getGlobalVariable (GlobalVariable p) = peek p
class (Storable cb) => Callback cb where
type F cb :: *
nullCallback :: cb
makeCallback :: F cb -> IO cb
freeCallback :: cb -> IO ()
withCallback :: F cb -> (cb -> IO a) -> IO a
withCallback f c = do
made <- makeCallback f
result <- c made
freeCallback made
return result