LINUX.ORG.RU

[Haskell] GUI в декларатином стиле

 


0

3

Возьмем простой пример: окно, поле ввода, кнопка. По нажатию на кнопку считываем из поля строку, переводим в верхний регистр, выводим в поле ввода.

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

Очевидно, что второй пример проще. Можно такой же очевидный пример, показывающий преимущества реактивного подхода?



Последнее исправление: tymmym (всего исправлений: 1)

В первом примере логика обработки данных выделенна в отдельную функцию:

setupNetwork input exec = compile $ do
  eexec  <- event0 exec command
  binput <- behavior input text

  let
      output = stepperD "" $ (up <$> binput) <@ eexec

  sink input [text :== output]

В целом, она можнет работать отдельно от гуи, что говорит о лучшей декомпозиции задачи.

Попробуй написать простейшее CRUD приложение, с возможностью фильтрации на wxHaskell, а я кину реализацию на bannana, и сравним что получилось.(за функциональные требования можеш взять пример из banana-wx, он так и называется CRUD).

anonymous
()

Так хаскель же. На нём факториалы с сортировками считаются чрезвычайно изящно, а как чуть в сторону реальной жизни дело идёт, так начинается тихий ужос.

ugoday ★★★★★
()
Ответ на: комментарий от anonymous

Не следует обижаться на правду сколь бы горька и непрятна она не была.

ugoday ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.