ghcjs + натрия: никаких событий через некоторое время

ОБНОВЛЕНИЕ: есть проблема в ghcjs: https://github.com/ghcjs/ghcjs/issues/296


я играю с ghcjs и натрием, но через 3 секунды мое приложение больше не генерирует события.

минимальный пример:

  • кнопка: генерировать события
  • поведение счетчика: считает нажатия кнопки
  • div: отображает поведение счетчика
  • через 3 секунды div больше не обновляется
  • если я перезагружаю страницу, счетчик обновляется снова - в течение 3 секунд

{-# LANGUAGE OverloadedStrings #-}
module Main where

import           Control.Applicative ((<$>))
import           Control.Concurrent  (forkIO, threadDelay)
import           Control.Monad       (forever)
import           Data.Default        (def)
import           Data.Text           (Text, pack)
import           FRP.Sodium
import           JavaScript.JQuery   hiding (Event)


main :: IO ()
main = do
  body <- select "body"

  -- a button
  (btn, btnE) <- mkBtnE "Click"
  appendJQuery btn body


  -- a behavior: counter - increment when btnE (button event) arrive
  counterB <- sync $ accum 0 (const (+1) <$> btnE)


  -- a div with the counter value
  counterView <- mkDiv $ fmap (pack . show) counterB
  appendJQuery counterView body


  -- wait -> nothing changed
  -- forkIO $ forever (threadDelay 1000000000)
  return ()




mkBtn :: Text -> IO JQuery
mkBtn label = select "<button/>" >>= setText label


mkBtnE :: Text -> IO (JQuery, Event ())
mkBtnE label = do
  (e, t) <- sync newEvent
  btn <- mkBtn label
  on (const $ sync $ t ()) "click" def btn
  return (btn, e)


mkDiv :: Behaviour Text -> IO JQuery
mkDiv b = do
  div <- select "<div/>"
  sync $ listen (value b) (\t -> setText t div >> return ())
  return div

Полный пример находится по https://github.com/j-keck/ghcjs-sodium

Спасибо

0 ответов

Другие вопросы по тегам