次のような関数がある場合:
some_type_t* some_type_create(const char* name, char** errptr);
次の署名を持つ Haskell バインディングを生成する C2HS を取得する方法はありますか?
someTypeCreate :: String -> IO (SomeTypeFPtr, String)
これが私がこれまでに得ることができるものです:
{#fun some_type_create as ^
{`String', alloca- `Ptr CChar' peek*} -> `SomeTypeFPtr' #}
そして、それは私が得る方法で機能します
someTypeCreate :: String -> IO (SomeTypeFPtr, (Ptr CChar))
しかし、どうすればそれを返すことができますかIO (SomeTypeFPtr, String)
(またはエラーを表すため) IO (Either String SomeTypeFPtr))?String
結果の型を変換する代わりに、別のマーシャラーを使用/作成する必要があるpeekと思いますが、その方法がよくわかりません。