Я пытаюсь в первый раз использовать Reactive Banana (WX) для отображения текста типа «Нажатая кнопка« Один »,« Нажатая кнопка Два »и т. Д. На пяти кнопках:Reactive Banana: Альтернативные события кнопок
{-# LANGUAGE ScopedTypeVariables #-}
import Graphics.UI.WX hiding (Event)
import Reactive.Banana
import Reactive.Banana.WX
data Buttons = One | Two | Three | Four | Five deriving (Show)
main :: IO()
main = start $ do
f <- frame [text := “Five Buttons“]
bone <- button f [text := “One”]
btwo <- button f [text := “Two”]
bthree <- button f [text := “Three”]
bfour <- button f [text := “Four”]
bfive <- button f [text := “Five”]
out <- staticText f []
set f [layout := margin 10 $
column 5 [row 5 [widget bone, widget btwo, widget bthree, widget bfour, widget bfive],
grid 5 5 [[label “Output:” , widget out]
]]]
let networkDescription :: forall t. Frameworks t => Moment t()
networkDescription = do
eone <- event0 bone command
etwo <- event0 btwo command
ethree <- event0 bthree command
efour <- event0 bfour command
efive <- event0 bfive command
let
somethinghere::Behaviour t Buttons
somethinghere = ....
sink out [text :== "Pressed button " ++ show <$> somethinghere]
network <- compile networkDescription
actuate network
Код - только основной скелет. То, что я не могу сделать в данный момент, заключается в заполнении метода somethinghere
. Как сказано, если, например, нажата кнопка «Один», то somethinghere
должен вернуться со ссылкой на Buttons
Данные ADT One
и так далее. Я пробовал с accumB
и unionWith
, но я не думаю, что получаю право на механизм. Любая помощь?