2013-10-16 31 views
17

如何在GHCJS中導入如下的Javascript函數?GHCJS:如何使用FFI導入高階JavaScript函數?

xs.subscribe(function(x) { console.log(x) }) 

我嘗試沒有成功以下的各種組合:

data Observable_ 
data Disposable_ 

type Observable a = JSRef Observable_ 
type Disposable = JSRef() 

foreign import javascript unsafe "$1.subscribe($2)" 
    rx_subscribe :: Observable a -> JSRef (a -> IO()) -> IO Disposable 

任何幫助表示讚賞,並鏈接到GHCJS FFI的文檔。

感謝

+3

你讀過http://weblog.luite.com/wordpress/ ?p = 14? – Jonke

+0

我做過了,但是我還沒有找到關於如何導入以haskell lambda爲參數的JavaScript函數的示例,並將其轉換爲上面的JavaScript函數。 – Holoed

+0

這是爲了Famo.us代碼庫嗎? –

回答

11

由於在GHCJS IRC頻道的傢伙我得到了答案:

foreign import javascript safe "$1.subscribe($2)" 
    rx_subscribe :: Observable a -> JSFun (a -> IO()) -> IO Disposable 

subscribe :: FromJSRef a => (a -> IO()) -> Observable a -> IO Disposable 
subscribe f xs = syncCallback1 True True f' >>= rx_subscribe xs 
       where f' x = fromJSRef x >>= f . fromJust 

謝謝