@@ -416,12 +416,11 @@ fun :: JSCallAsFunction -> JSCallAsFunction
418#ifdef ghcjs_HOST_OS
418#ifdef ghcjs_HOST_OS
419−type HaskellCallback = Callback (JSVal -> JSVal -> IO ())
419+data Function = Function {functionCallback :: Callback (JSVal -> JSVal -> IO ()), functionObject :: Object}
421−type HaskellCallback = ()
421+newtype Function = Function {functionObject :: Object}
424−data Function = Function {functionCallback :: HaskellCallback, functionObject :: Object}
426-- ^ Make a JavaScript function object that wraps a Haskell function.
425-- ^ Make a JavaScript function object that wraps a Haskell function.
427function :: JSCallAsFunction -- ^ Haskell function to call
426function :: JSCallAsFunction -- ^ Haskell function to call
@@ -440,7 +439,7 @@ function f = do
440 obj <- Object <$> sendLazyCommand NewCallback
439 obj <- Object <$> sendLazyCommand NewCallback
441 add <- addCallback <$> askJSM
440 add <- addCallback <$> askJSM
442 liftIO $ add obj f
441 liftIO $ add obj f
443− return $ Function () obj
442+ return $ Function obj
446freeFunction :: Function -> JSM ()
445freeFunction :: Function -> JSM ()
@@ -448,13 +447,13 @@ freeFunction :: Function -> JSM ()
448freeFunction (Function callback _) = liftIO $
447freeFunction (Function callback _) = liftIO $
449 releaseCallback callback
448 releaseCallback callback
451−freeFunction (Function callback obj) = do
450+freeFunction (Function obj) = do
452 free <- freeCallback <$> askJSM
451 free <- freeCallback <$> askJSM
453 liftIO $ free obj
452 liftIO $ free obj
456instance ToJSVal Function where
455instance ToJSVal Function where
457− toJSVal (Function _ f) = toJSVal f
456+ toJSVal = toJSVal . functionObject
459-- | A callback to Haskell can be used as a JavaScript value. This will create
458-- | A callback to Haskell can be used as a JavaScript value. This will create
460-- an anonymous JavaScript function object. Use 'function' to create one with
459-- an anonymous JavaScript function object. Use 'function' to create one with