Open hamishmack opened 7 years ago
Not sure if we need the this
argument (I have never used it in the jsaddle
version), so we could probably get by with:
type CallbackMulti = Callback ([JSVal] -> IO ())
syncCallbackMulti :: OnBlocked -> ([JSVal] -> IO ())
-> IO (Callback (JSVal -> IO ()), CallbackMulti)
syncCallbackMulti onBlocked f = do
callback <- syncCallback1 onBlocked $ \args ->
Array.toListIO (coerce args) >>= f
(callback,) <$> makeMultiArgCallback callback
foreign import javascript unsafe "$r = function () { $1(arguments); }"
makeMultiArgCallback :: Callback (JSVal -> IO ()) -> IO CallbackMulti
I suggest documenting syncCallbackMulti
, asyncCallbackMulti
, and syncCallbackMulti'
on README.
Is a polyvariadic function going to help here? I don't know much about polyvariadic functions.
@luite This is useful because http://electron.atom.io/docs/api/app/#event-certificate-error requires a callback of 6 arguments. Currently, ghcjs-base cannot handle event-certificate-error
.
We should add something like this to
GHCJS.Foreign.Callback
(based onfunction
from jsaddle):Returns two values. The first is just for use with
releaseCallback
, the second is to pass on to JavaScript. We should change it to something more meaningful thanObject
.