使用reactive-banana-wx输入UI

时间:2011-07-01 06:52:22

标签: haskell reactive-programming reactive-banana

使用反应性香蕉时,如何获得ui元素的内容? event0返回类型为Event ()的事件,该事件具有单位类型而不是控件的类型。 event1采用类型为Event w (a -> IO ())的事件,但命令的类型为Event w (IO ())。 mapAccumE和mapAccumB将纯函数作为参数,因此get text foo不能与它们一起使用。

2 个答案:

答案 0 :(得分:4)

基本上,您希望使用函数而不是数据。如果您正在考虑“如何创建一个包含当前文本的行为”,则不会。而是编写将当前文本作为参数的函数,并在必要时传递它。假设您想在按下按钮时打印文本框的内容。然后你会做这样的事情:

eButton :: NetworkDescription (Event ())
eButton = event0 button command

network = do
  pressButton <- eButton
  reactimate $ (\() -> get text foo >>= print) <$> pressButton

如果需要获取行为的输入,您可以类似地使用类型为Behavior (String -> a)的函数(或您需要的任何类型),然后在{{1}的点处传递字符串打电话。

答案 1 :(得分:4)

reactive-banana发言的作者。对于迟到的回复,很抱歉,这里提出问题的可能性甚至没有让我想到。:-))

我今天发现我从库中省略了一个非常重要的功能:将UI元素的内容作为Behavior获取。尴尬! :-D

John描述了当前的解决方法,但下一版本的reactive-banana将包含缺失的功能。

编辑:我已经发布了反应性香蕉version 0.4,它现在包含了函数形式的功能

fromPoll :: IO a -> NetworkDescription (Behavior a)