0 | module Web.MVC.Widget
20 | constructor MkWidget
29 | setup : St -> Cmd Ev
31 | update : Ev -> St -> St
33 | display : Ev -> St -> Cmd Ev
38 | Semigroup Widget where
39 | w1 <+> w2 = MkWidget
40 | { St = (w1.St, w2.St)
41 | , Ev = Either w1.Ev w2.Ev
42 | , init = (w1.init, w2.init)
43 | , setup = \(s1, s2) => batch
44 | [ Left <$> w1.setup s1
45 | , Right <$> w2.setup s2
47 | , update = \ev, (s1, s2) => case ev of
48 | Left ev1 => (w1.update ev1 s1, s2)
49 | Right ev2 => (s1, w2.update ev2 s2)
50 | , display = \ev, (s1, s2) => case ev of
51 | Left ev => Left <$> w1.display ev s1
52 | Right ev => Right <$> w2.display ev s2
64 | , display = \_, _ => neutral
73 | runWidget : (JSErr -> IO ()) -> Widget -> IO ()
74 | runWidget onError w = runMVC update display onError Nothing w.init
76 | update : Maybe w.Ev -> w.St -> w.St
78 | update (Just ev) = w.update ev
80 | display : Maybe w.Ev -> w.St -> Cmd (Maybe w.Ev)
81 | display ev s = Just <$> maybe w.setup w.display ev s