2013-10-16 6 views
17

Wie importiere ich in GHCJS eine Javascript-Funktion wie die folgende?GHCJS: Wie importiere ich eine JavaScript Funktion mit FFI?

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

Ich habe versucht, verschiedene Kombinationen der folgenden ohne Erfolg:

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 

Jede Hilfe sehr geschätzt wird, und Links zur Dokumentation des GHCJS FFI.

Dank

+3

Haben Sie lesen http://weblog.luite.com/wordpress/ ? p = 14? – Jonke

+0

Ich tat, aber ich habe kein Beispiel dafür gefunden, wie man eine JavaScript-Funktion importiert, die ein Haskell-Lambda als Argument verwendet und es in eine JavaScript-Funktion wie die obige umwandelt. – Holoed

+0

ist dies für eine Fado.us Codebase zufällig? –

Antwort

11

Dank an die Jungs auf dem GHCJS IRC-Kanal bekam ich die Antwort:

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 

Danke

Verwandte Themen