Ввод пользовательского интерфейса с реактивным-бананом-wx

Как вы получаете содержимое элементов пользовательского интерфейса при использовании реактивного банана? Event0 возвращает событие типа Event (), которое имеет тип единицы вместо типа элемента управления. event1 принимает событие типа Event w (a -> IO ()), но команда имеет тип Event w (IO ()). mapAccumE и mapAccumB принимают в качестве параметров чистые функции, поэтому get text foo нельзя использовать с ними.


person Masse    schedule 01.07.2011    source источник


Ответы (2)


По сути, вы хотите работать с функциями, а не с данными. Если вы думаете: «Как мне создать поведение, которое имеет текущий текст в поле», вы этого не сделаете. Вместо этого вы пишете функции, которые принимают текущий текст в качестве параметра и передают его при необходимости. Предположим, вы хотите распечатать содержимое текстового поля при нажатии кнопки. Тогда вы бы сделали что-то вроде этого:

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

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

Если вам нужно получить входные данные в поведение, вы можете аналогичным образом использовать функцию с типом Behavior (String -> a) (или любым другим типом, который вам нужен), а затем просто передать строку в точке вызова reactimate.

person John L    schedule 01.07.2011

(Автор reactive-banana говорит. Извините за поздний ответ, возможны вопросы тут даже в голову не пришло. :-))

Сегодня я обнаружил, что упустил из библиотеки очень важную функцию: получение содержимого элемента пользовательского интерфейса в виде файла Behavior. Стыдно! :-Д

Джон описывает текущий обходной путь, но следующая версия реактивного -банан будет включать недостающую функцию.

РЕДАКТИРОВАТЬ: я выпустил реактивную банановую версию 0.4. который теперь включает функциональность в виде функции

fromPoll :: IO a -> NetworkDescription (Behavior a)
person Heinrich Apfelmus    schedule 04.07.2011