blob: 3fc8896f54dea3d86a8bb28e46fd7ca3808d6ef3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
import GHC.JS.Prim
import GHC.JS.Foreign.Callback
foreign import javascript "(() => { return 1; })"
plus_one0 :: IO JSVal
foreign import javascript "((x) => { return x + 1; })"
plus_one1 :: JSVal -> IO JSVal
foreign import javascript "((x,y) => { return x + y + 1; })"
plus_one2 :: JSVal -> JSVal -> IO JSVal
foreign import javascript "((x,y,z) => { return x + y + z + 1; })"
plus_one3 :: JSVal -> JSVal -> JSVal -> IO JSVal
foreign import javascript "((f) => { return f(); })"
js_apply0 :: Callback (IO JSVal) -> IO JSVal
foreign import javascript "((f,x) => { return f(x); })"
js_apply1 :: Callback (JSVal -> IO JSVal) -> JSVal -> IO JSVal
foreign import javascript "((f,x,y) => { return f(x,y); })"
js_apply2 :: Callback (JSVal -> JSVal -> IO JSVal) -> JSVal -> JSVal -> IO JSVal
foreign import javascript "((f,x,y,z) => { return f(x,y,z); })"
js_apply3 :: Callback (JSVal -> JSVal -> JSVal -> IO JSVal) -> JSVal -> JSVal -> JSVal -> IO JSVal
logJSInt :: JSVal -> IO ()
logJSInt = print . fromJSInt
main :: IO ()
main = do
plusOne0 <- syncCallback' plus_one0
plusOne1 <- syncCallback1' plus_one1
plusOne2 <- syncCallback2' plus_one2
plusOne3 <- syncCallback3' plus_one3
logJSInt =<< js_apply0 plusOne0
logJSInt =<< js_apply1 plusOne1 (toJSInt 2)
logJSInt =<< js_apply2 plusOne2 (toJSInt 2) (toJSInt 3)
logJSInt =<< js_apply3 plusOne3 (toJSInt 2) (toJSInt 3) (toJSInt 4)
|