0

一部の C プロジェクトへの Haskell バインディングを作成していますが、次の型の関数があります。

void foo(char *);

問題は、fooこのポインターのNULL値をチェックし、通常の動作とは異なることを行うことです。私の Haskell ソース ラッパーでは、この関数の型と内部をfoo :: String -> IO ()使用して引数をマーシャリングしています。newCString

どうすればユーザー能力パスをNULLそこに与えることができるのだろうか? 以来、それがnewCString ""私に与えることを期待していましたが、そうではありません。0"" /= "\0"

今のところ私が見る唯一の方法は、ユーザーが望んNULLでいる指標として "" を使用することですが、それはハックのようです。この問題は非常に一般的であると予想していますが、SOに関する質問は見つかりませんでした。

4

1 に答える 1

4

関数を次のように変更できます

foo :: Maybe String -> IO ()

そして、C 関数Nothingに a を送信します。nullPtr

于 2012-12-22T12:15:19.110 に答える