より大きなhaskell-ghcjsプロジェクトに統合するために、ghcjsを使用してhaskellライブラリminisatをJavaScriptに移植しようとしています。GHCJSでのemscriptenエクスポートのccallインポート
minisatには、cライブラリからいくつかのffiインポートが含まれています。私はemscriptenを使ってjavascriptにcライブラリをコンパイルし、minisatが必要とする関数をエクスポートするようにしました。ここまでは順調ですね。
はしかし、次のようになり、輸入がいくつかあります:このようになります機能インポート
foreign import ccall safe minisat_solve :: Solver -> Int -> Ptr (Lit) -> IO (Bool)
int minisat_solve(minisat_solver *s, int len, minisat_Lit *ps)
私の理解を、 emscriptenがポインタを受け取ったり返す関数をエクスポートすると、ポインタはJavaScriptの数値型になります。
ghcjs documentationは、JavaScript関数を適切にラッピングすることによって、既存の外部インポートをそのまま残すことが可能であることを示唆しています。しかし、ghcjsはポインタ型をJavaScriptオブジェクトと数字からなるおおよそのペアとして表しています。
私はラッパーコードは、大きく
function h$minisat_solve(...){
...
minisat_solve(...)
...
}
function minisat_solve = Module.cwrap('minisat_solve',...,...)
されるべきだと思うしかし、私は、型の不一致により困惑します。
ので、ここでの課題です:(私はそれは完全に間違って持っている場合、または反例)適切例として、上記のラッパーコードを使用して、ghcjs
でccall
インポートのemscripten輸出をラップする方法を説明し