Javascript ccall在GHCJS中导入emscripten导出

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

我正在尝试使用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-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使用这些函数所需的任何格式