[Haskell] GUI в декларатином стиле
Возьмем простой пример: окно, поле ввода, кнопка. По нажатию на кнопку считываем из поля строку, переводим в верхний регистр, выводим в поле ввода.
C использованием reactive-banana:
import Char (toUpper)
import Graphics.UI.WX hiding (Event)
import Reactive.Banana
import Reactive.Banana.WX
main = start $ do
f <- frame []
input <- entry f []
exec <- button f [ text := "Execute" ]
set f [layout := row 5 [widget input, widget exec]]
nerwork <- setupNetwork input exec
actuate nerwork
setupNetwork input exec = compile $ do
eexec <- event0 exec command
binput <- behavior input text
let
output = stepperD "" $ (up <$> binput) <@ eexec
sink input [text :== output]
up = map toUpper
Просто wxHaskell:
import Char (toUpper)
import Graphics.UI.WX
main = start $ do
f <- frame []
input <- entry f []
exec <- button f [ text := "Execute"
, on command := guiUp input ]
set f [layout := row 5 [widget input, widget exec]]
guiUp input = do
s <- get input text
set input [ text := up s ]
up = map toUpper
Очевидно, что второй пример проще. Можно такой же очевидный пример, показывающий преимущества реактивного подхода?