簡體   English   中英

Haskell反應性香蕉FRP和事件循環

[英]Haskell Reactive-Banana FRP and event loop

我仍然在努力圍繞Haskell和FRP。 具體來說,我已經使用反應香蕉包研究了一些示例,並開始獲得FRP。

但是,我仍然不了解事件網絡如何知道何時發生輸入事件。 我的理解是,與NodeJS不具有事件循環不斷檢查用戶輸入的情況不同,FRP利用不同的框架來“等待”或“檢查”用戶輸入或外部信號。

根據我的閱讀,FRP使時間明確。 通過將時間與事件或行為相結合,網絡總會以某種方式知道何時觸發了外部刺激。

我讀過Conal,Hudak等人的許多論文。 並且解釋太技術性了。 請提供較少的技術說明。

謝謝你的幫助。

記住FRP與平台特定的“膠水代碼”之間的區別是有用的,FRP與從基本Event構建有趣的EventBehavior有關,該平台提供了基本Event的集合,例如當前的鼠標位置或鍵盤按鍵。

在Reactive-Banana庫中,這種區別體現在模塊結構中,其中Reactive.Banana.Combinators與第一部分有關,而Reactive.Banana.Frameworks與第二部分有關。

現在,了解第二部分(基本Events )的工作原理對於了解第一部分(FRP)的工作原理並不重要。 實際上,不同的庫可能會做出非常不同的實現選擇。

就是說,在Reactive-Banana庫中,事件網絡本質上是一個巨大的回調函數,該函數將自身注冊到外部事件源(在庫中稱為AddHandler )。 每當這些外部源之一調用回調函數時,后者將按依賴關系順序遍歷EventBehavior圖,對內部狀態執行必要的更新,並最終運行先前向reactimate注冊的動作。

FRP的神奇之處在於,庫用戶看不到任何這些實現​​細節,盡管有時知道“事件網絡=巨大的回調函數”有時會很有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM