将外部事件注入库中
这个例子并没有绑定任何具体的 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