FunPtr

data FunPtr a
base Foreign.Ptr, base GHC.Exts
A value of type FunPtr a is a pointer to a function callable from foreign code. The type a will normally be a foreign type, a function type with zero or more arguments * the argument types are marshallable foreign types, i.e. Char, Int, Double, Float, Bool, Data.Int.Int8, Data.Int.Int16, Data.Int.Int32, Data.Int.Int64, Data.Word.Word8, Data.Word.Word16, Data.Word.Word32, Data.Word.Word64, Ptr a, FunPtr a, Foreign.StablePtr.StablePtr a or a renaming of any of these using newtype. * the return type is either a marshallable foreign type or has the form IO t type or (). A value of type FunPtr a may be a pointer to a foreign function, either returned by another foreign function or imported with a a static address import like > foreign import ccall "stdlib.h &free" > p_free :: FunPtr (Ptr a -> IO ()) or a pointer to a Haskell function created using a wrapper stub declared to produce a FunPtr of the correct type. For example: > type Compare = Int -> Int -> Bool > foreign import ccall "wrapper" > mkCompare :: Compare -> IO (FunPtr Compare) Calls to wrapper stubs like mkCompare allocate storage, which should be released with Foreign.Ptr.freeHaskellFunPtr when no longer required. To convert FunPtr values to corresponding Haskell functions, one can define a dynamic stub for the specific foreign type, e.g. > type IntFunction = CInt -> IO () > foreign import ccall "dynamic" > mkFun :: FunPtr IntFunction -> IntFunction
FunPtr :: Addr# -> FunPtr a
base GHC.Exts
castFunPtr :: FunPtr a -> FunPtr b
base Foreign.Ptr
Casts a FunPtr to a FunPtr of a different type.
castFunPtrToPtr :: FunPtr a -> Ptr b
base Foreign.Ptr
Casts a FunPtr to a Ptr. Note: this is valid only on architectures function pointers range over the same set of addresses, and should only be used for bindings to external libraries whose interface already relies on this assumption.
castPtrToFunPtr :: Ptr a -> FunPtr b
base Foreign.Ptr
Casts a Ptr to a FunPtr. Note: this is valid only on architectures function pointers range over the same set of addresses, and should only be used for bindings to external libraries whose interface already relies on this assumption.
freeHaskellFunPtr :: FunPtr a -> IO ()
base Foreign.Ptr
Release the storage associated with the given FunPtr, which must have been obtained from a wrapper stub. This should be called whenever the return value from a foreign import wrapper function is no longer required; otherwise, the storage it uses will leak.
nullFunPtr :: FunPtr a
base Foreign.Ptr
The constant nullFunPtr contains a distinguished value of FunPtr that is not associated with a valid memory location.