GHCJS: Как мне импортировать функцию javascript высокого порядка с помощью FFI?

Как мне импортировать в GHCJS функцию 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.

Спасибо


person Holoed    schedule 16.10.2013    source источник
comment
Вы читали weblog.luite.com/wordpress/?p=14?   -  person Jonke    schedule 17.10.2013
comment
Я это сделал, но не нашел примера того, как импортировать функцию javascript, которая принимает лямбду Haskell в качестве аргумента и преобразует ее в функцию JavaScript, подобную приведенной выше.   -  person Holoed    schedule 17.10.2013
comment
это случайно не кодовая база Famo.us?   -  person Erik Kaplun    schedule 04.05.2015


Ответы (1)


Благодаря ребятам на IRC-канале GHCJS я получил ответ:

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

Благодарю вас

person Holoed    schedule 17.10.2013