I'm writing Haskell bindings to some C project and there is a function of type
void foo(char *);
The problem is that foo
checks this pointer for NULL
value and do something different from normal behavior. In my Haskell source wrapper for this function have type foo :: String -> IO ()
and using newCString
inside to marshal it's argument.
I wonder how do i give user ability pass NULL
there? I've been expecting that newCString ""
would give me 0
since "" /= "\0"
, but that's not the case.
The only way i see for now is to use "" as indicator that user wants NULL
, but that seems hackish. I'm expecting that this problem is quite common, but didn't found a question on SO.
You could change your function to
foo :: Maybe String -> IO ()
And then for Nothing
send a nullPtr
to your C function.