2013-10-29 51 views
8

我已經搜查了reactive-banana的文檔,我找不到指定顯式時間延遲的方法。比如說,我想採取Event t a,並將其所有事件在未來1秒內轉移;或從現在開始發生1秒鐘的事件(在Moment t之內);或類似的東西。反應式香蕉中是否有明確的延遲?如果不是,用戶如何實現(例如,延遲一秒鐘回顯輸入)?反應 - 香蕉時間延遲

回答

4

正如本指出的,這是正確的:反應式香蕉不是固有的時間和延遲概念。

主要原因是很難保證邏輯時間和實時性的一致。當一個事件的邏輯時間尚未計算出來之前,實時發生鼠標點擊時,會發生什麼情況,即其實時是否在其邏輯時間之後變暗?

但是,仍然有可能通過使用外部計時器事件來處理時間。看看Wave.hs的例子。

3

我不是一個專家,但我已經使用了一個更老的反應式香蕉來滿足這種需求的程序(不幸的是,我目前沒有手頭的代碼)。

認爲是明確的延誤不符合超天然反應香蕉框架,因爲你總是含蓄地處理某種抽象的時間。延遲特定時間間隔需要處理現實世界的時間概念。我可以看到,很難說union event (delay 1.0 event)是什麼意思,在權威模型方面type Event a = [Maybe a]:應該是[a, b, a, b][a, a, b, b]?正如我一直在想的那樣,問題在於如果沒有考慮運行運行時細節,那麼這兩者中哪一個應該是未指定的。

但是你可以通過將IO動作連接到你想延遲睡眠一段時間的事件(顯然不在主線程中)然後觸發一個不同的事件來實現「反應 - 香蕉框架」 。我相信我能夠將所有這些邏輯都包含在我可以從NetworkDescription monad調用的函數中(這是在存在Moment monad之前)以獲得新的延遲事件。