Library/cinvoke
Jump to navigation
Jump to search
cinvoke is a library allowing C functions of types only known at runtime to be called from Haskell.
As an example is worth a thousand words:
module Main where
import Foreign.Ptr
import Foreign.CInvoke
main = do
cxt <- newContext
libc <- loadLibrary cxt "libc.so.6"
malloc <- loadSymbol libc "malloc"
memset <- loadSymbol libc "memset"
free <- loadSymbol libc "free"
let sz = 2^30
p <- cinvoke malloc (retPtr retVoid) [argCSize sz]
cinvoke memset (retPtr retVoid) [argPtr p, argCInt 0, argCSize sz]
cinvoke free (retPtr retVoid) [argPtr p]