將外部事件注入庫中
這個例子並沒有繫結任何具體的 GUI 工具包,例如 reactive-banana-wx。相反,它顯示瞭如何將正式的 IO
行動注入 FRP 機制。
Control.Event.Handler
模組提供了 addHandler
功能,可以建立一對 AddHandler a
和 a -> IO ()
值。前者由反應香蕉本身用於獲得 Event a
值,而後者是用於觸發相應事件的普通函式。
import Data.Char (toUpper)
import Control.Event.Handler
import Reactive.Banana
main = do
(inputHandler, inputFire) <- newAddHandler
在我們的例子中,處理程式的 a
引數是 String
型別,但允許編譯器推斷的程式碼將在稍後寫入。
現在我們定義描述我們的 FRP 驅動系統的 EventNetwork
。這是使用 compile
函式完成的:
main = do
(inputHandler, inputFire) <- newAddHandler
compile $ do
inputEvent <- fromAddHandler inputHandler
fromAddHandler
函式將 AddHandler a
值轉換為 Event a
,這將在下一個示例中介紹。
最後,我們啟動事件迴圈,它會觸發使用者輸入的事件:
main = do
(inputHandler, inputFire) <- newAddHandler
compile $ do
...
forever $ do
input <- getLine
inputFire input