on master help sign in
Simplify Function type internals
7c3dc97Hamish Mackenzie
jsaddle.cabal+1−1
@@ -1,5 +1,5 @@
1name: jsaddle
1name: jsaddle
2−version: 0.5.1.1
2+version: 0.5.2.0
3cabal-version: >=1.10
3cabal-version: >=1.10
4build-type: Simple
4build-type: Simple
5license: MIT
5license: MIT
src/Language/Javascript/JSaddle/Object.hs+5−6
@@ -416,12 +416,11 @@ fun :: JSCallAsFunction -> JSCallAsFunction
416fun = id
416fun = id
417
417
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}
420#else
420#else
421−type HaskellCallback = ()
421+newtype Function = Function {functionObject :: Object}
422#endif
422#endif
423
423
424−data Function = Function {functionCallback :: HaskellCallback, functionObject :: Object}
425
424
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
444#endif
443#endif
445
444
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
450#else
449#else
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
454#endif
453#endif
455
454
456instance ToJSVal Function where
455instance ToJSVal Function where
457− toJSVal (Function _ f) = toJSVal f
456+ toJSVal = toJSVal . functionObject
458
457
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