c2hs を使用して C ライブラリをラップしようとしています。次のように Haskell でマッピングした不透明な C 構造体があります。
{#pointer *foo as Foo foreign newtype #}
ファイナライザーで自動的にクリーンアップできるように、外部ポインターを使用しました。それはすべてうまくいくようです。ただし、次のような関数ポインターをラップしたいと思います。
typedef void (*hook_func)(foo *f, int a);
私の Haskell コードは次のようになります。
type HookFunc = Foo -> Int -> IO ()
foreign import ccall "wrapper"
mkHookFunc :: HookFunc -> IO (FunPtr HookFunc)
ただし、コンパイルすると、次のエラーが発生します。
Unacceptable argument type in foreign declaration:
ForeignPtr Foo
このエラーの最善の解決策についてのアイデアはありますか? 私の最初の考えは、unsafeForeignPtrToPtr単に foo ポインターに変換するために使用する必要があるということですが、これを行う方法や「ラッパー」に配置する場所がわかりません。
手がかりはありますか?