事件型別
在反應性香蕉中,Event
型別代表了一些事件的及時流。Event
類似於模擬脈衝訊號,因為它在時間上不連續。因此,Event
只是 Functor
型別類的一個例項。你不能將兩個 Event
組合在一起,因為它們可能會在不同時間點火。你可以用 Event
的[當前]值做一些事情並用一些 IO
動作做出反應。
使用 fmap
完成 Event
s 值的轉換:
main = do
(inputHandler, inputFire) <- newAddHandler
compile $ do
inputEvent <- fromAddHandler inputHandler
-- turn all characters in the signal to upper case
let inputEvent' = fmap (map toUpper) inputEvent
對 Event
的反應也是以同樣的方式完成的。首先你用 a -> IO ()
型別的動作然後將它傳遞給 reactimate
函式:
main = do
(inputHandler, inputFire) <- newAddHandler
compile $ do
inputEvent <- fromAddHandler inputHandler
-- turn all characters in the signal to upper case
let inputEvent' = fmap (map toUpper) inputEvent
let inputEventReaction = fmap putStrLn inputEvent' -- this has type `Event (IO ())
reactimate inputEventReaction
現在每當呼叫 inputFire "something"
時,都會列印出 SOMETHING
。