Javascript ccall在GHCJS中导入emscripten导出
我正在尝试使用ghcjs将haskell库移植到JavaScript,以便集成到更大的haskell ghcjs项目中 minisat包含几个来自c库的ffi导入。我已经设法使用emscripten将c库编译成javascript,并导出minisat所需的函数。到目前为止,一切顺利 但是,有两种导入方式如下所示:Javascript ccall在GHCJS中导入emscripten导出,javascript,c,haskell,emscripten,ghcjs,Javascript,C,Haskell,Emscripten,Ghcjs,我正在尝试使用ghcjs将haskell库移植到JavaScript,以便集成到更大的haskell ghcjs项目中 minisat包含几个来自c库的ffi导入。我已经设法使用emscripten将c库编译成javascript,并导出minisat所需的函数。到目前为止,一切顺利 但是,有两种导入方式如下所示: foreign import ccall safe miniat\u solve::Solver->Int->Ptr(Lit)->IO(Bool) 它导入的函数如下所示: int-m
foreign import ccall safe miniat\u solve::Solver->Int->Ptr(Lit)->IO(Bool)
它导入的函数如下所示:
int-miniat\u-solve(miniat\u-solver*s、int-len、miniat\u-Lit*ps)
我的理解是,当emscripten导出一个接受或返回指针的函数时,指针就变成了JavaScript数字类型
这表明,通过适当地包装JavaScript函数,应该可以保留现有的外部导入。然而,ghcjs将指针类型大致表示为一对,由JavaScript对象和数字组成
我认为包装器代码应该大致相同
function h$minisat_solve(...){
...
minisat_solve(...)
...
}
function minisat_solve = Module.cwrap('minisat_solve',...,...)
但我被类型不匹配难倒了
因此,这里有一个挑战:解释如何通过
ghcjs
为ccall
导入正确包装emscripten导出,使用上述包装器代码作为示例(或反例,如果我完全错误)指针类型可以转换为整数或从整数转换为:。因此,您应该能够转换为emscripten使用这些函数所需的任何格式