The GHC Wasm JSFFI only supports (apart from primitive types) JSVal
and newtypes on top of JSVal
, such as JSString
. The issue here is that GHC doesn’t see that JSString
is a newtype of JSVal
, so it complains. (The error message could certainly be improved!)
The solution is to import the constructor of JSString
:
import GHC.Wasm.Prim (JSString(..), fromJSString, toJSString)
Then your example will compile.
Note that this is analogous to “regular” C FFI: Compiling
import Foreign.C.Types (CInt)
foreign import capi "abs" absss :: CInt -> CInt
will fail with
• Unacceptable result type in foreign declaration:
‘CInt’ cannot be marshalled in a foreign call
because its data constructor is not in scope
• When checking declaration:
foreign import capi safe "abs" absss :: CInt -> CInt
Suggested fix: Import the data constructor ‘CInt’ of ‘CInt’
|
10 | foreign import capi "abs" absss :: CInt -> CInt
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^