2017-10-21 11 views
4

より大きな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)

the documentationから

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',...,...) 

されるべきだと思うしかし、私は、型の不一致により困惑します。

ので、ここでの課題です:(私はそれは完全に間違って持っている場合、または反例)適切例として、上記のラッパーコードを使用して、ghcjsccallインポートのemscripten輸出をラップする方法を説明し

答えて

関連する問題