@@ -28,33 +28,33 @@ Since MonadWidget depends on MonadHold and MonadHold depends on MonadSample, any
30-- Trivial Event
30-- Trivial Event
31−[ ] never :: Event a
31+[ ] never :: Event a
33-- Extract Event from Dynamic
33-- Extract Event from Dynamic
34[ ] updated :: Dynamic a -> Event a
34[ ] updated :: Dynamic a -> Event a
36-- Transform Event to Event using function
36-- Transform Event to Event using function
37−[ ] fmap :: (a -> b) -> Event a -> Event b
37+[ ] fmap :: (a -> b) -> Event a -> Event b
38−[ ] fmapMaybe :: (a -> Maybe b) -> Event a -> Event b
38+[ ] fmapMaybe :: (a -> Maybe b) -> Event a -> Event b
39−[ ] ffor :: Event a -> (a -> b) -> Event b
40−[ ] fforMaybe :: Event a -> (a -> Maybe b) -> Event b
41−[ ] ffilter :: (a -> Bool) -> Event a -> Event a
39+[ ] ffilter :: (a -> Bool) -> Event a -> Event a
40+[ ] ffor :: Event a -> (a -> b) -> Event b
41+[ ] fforMaybe :: Event a -> (a -> Maybe b) -> Event b
42[ ] splitE :: Event (a, b) -> (Event a, Event b)
42[ ] splitE :: Event (a, b) -> (Event a, Event b)
44-- Event to identical Event with debug trace.
44-- Event to identical Event with debug trace.
45−[ ] traceEvent :: Show a => String -> Event a -> Event a
45+[ ] traceEvent :: Show a => String -> Event a -> Event a
46−[ ] traceEventWith :: (a -> String) -> Event a -> Event a
46+[ ] traceEventWith :: (a -> String) -> Event a -> Event a
48-- Transform Event to Event by sampling Behavior or Dynamic
48-- Transform Event to Event by sampling Behavior or Dynamic
49−[ ] tag :: Behavior b -> Event a -> Event b
50−[ ] tagDyn :: Dynamic a -> Event b -> Event a
51−[ ] gate :: Behavior Bool -> Event a -> Event a
49+[ ] gate :: Behavior Bool -> Event a -> Event a
50+[ ] tag :: Behavior a -> Event b -> Event a
51+[ ] tagDyn :: Dynamic a -> Event b -> Event a
52−[ ] attach :: Behavior a -> Event b -> Event (a, b)
52+[ ] attach :: Behavior a -> Event b -> Event (a, b)
53−[ ] attachDyn :: Dynamic a -> Event b -> Event (a, b)
53+[ ] attachDyn :: Dynamic a -> Event b -> Event (a, b)
54−[ ] attachWith :: (a -> b -> c) -> Behavior a -> Event b -> Event c
54+[ ] attachWith :: (a -> b -> c) -> Behavior a -> Event b -> Event c
55−[ ] attachDynWith :: (a -> b -> c) -> Dynamic a -> Event b -> Event c
55+[ ] attachDynWith :: (a -> b -> c) -> Dynamic a -> Event b -> Event c
56−[ ] attachWithMaybe :: (a -> b -> Maybe c) -> Behavior a -> Event b -> Event c
56+[ ] attachWithMaybe :: (a -> b -> Maybe c) -> Behavior a -> Event b -> Event c
57−[ ] attachDynWithMaybe :: (a -> b -> Maybe c) -> Dynamic a -> Event b -> Event c
57+[ ] attachDynWithMaybe :: (a -> b -> Maybe c) -> Dynamic a -> Event b -> Event c
59-- Combine multiple Events
59-- Combine multiple Events
60[ ] <> :: Monoid a => Event a -> Event a -> Event a
60[ ] <> :: Monoid a => Event a -> Event a -> Event a
@@ -65,18 +65,18 @@ Since MonadWidget depends on MonadHold and MonadHold depends on MonadSample, any
65[ ] mergeMap :: Ord k => Map k (Event a) -> Event (Map k a)
65[ ] mergeMap :: Ord k => Map k (Event a) -> Event (Map k a)
67-- Efficient one-to-many fanout
67-- Efficient one-to-many fanout
68−[ ] fan :: GCompare k => Event (DMap k) -> EventSelector k
69−[ ] fanMap :: Ord k => Event (Map k a) -> EventSelector (Const2 k a)
68+[ ] fanMap :: Ord k => Event (Map k a) -> EventSelector (Const2 k a)
69+[ ] fan :: GCompare k => Event (DMap k) -> EventSelector k
70−[ ] select :: EventSelector k -> k a -> Event a
70+[ ] select :: EventSelector k -> k a -> Event a
72-- Event to Event via monadic function
72-- Event to Event via monadic function
73−[ ] push :: (a -> m (Maybe b)) -> Event a -> Event b
73+[ ] push :: (a -> m (Maybe b)) -> Event a -> Event b
74−[ ] pushAlways :: (a -> m b) -> Event a -> Event b
74+[ ] pushAlways :: (a -> m b ) -> Event a -> Event b
75 -- Note supplied function operates in [H] context
75 -- Note supplied function operates in [H] context
77-- Event to monadic Event
77-- Event to monadic Event
78−[H] headE :: Event a -> m (Event a)
78+[H] headE :: Event a -> m (Event a)
79−[H] tailE :: Event a -> m (Event a)
79+[H] tailE :: Event a -> m (Event a)
80[H] headTailE :: Event a -> m (Event a, Event a)
80[H] headTailE :: Event a -> m (Event a, Event a)
@@ -86,63 +86,69 @@ These functions flatten Event-of-Event, Behavior-of-Event, or Dynamic-of-Event i
88-- Flatten Event-of-Event to monadic Event. New Event is used immediately.
88-- Flatten Event-of-Event to monadic Event. New Event is used immediately.
89−[H] switchPromptly :: Event a -> Event (Event a) -> m (Event a)
89+[H] switchPromptly :: Event a -> Event (Event a) -> m (Event a)
91-- Flatten Behavior-of-Event to Event. Old Event is used during switchover.
91-- Flatten Behavior-of-Event to Event. Old Event is used during switchover.
92−[ ] switch :: Behavior (Event a) -> Event a
92+[ ] switch :: Behavior (Event a) -> Event a
94-- Flatten Dyanmic-of-Event to Event. New Event is used immediately.
94-- Flatten Dyanmic-of-Event to Event. New Event is used immediately.
95−[ ] switchPromptlyDyn :: Dynamic (Event a) -> Event a
95+[ ] switchPromptlyDyn :: Dynamic (Event a) -> Event a
97-- Flatten Event-of-Event to Event that fires when both wrapper and new Event fire.
97-- Flatten Event-of-Event to Event that fires when both wrapper and new Event fire.
98−[ ] coincidence :: Event (Event a) -> Event a
98+[ ] coincidence :: Event (Event a) -> Event a
100+-- Flatten Dynamic-of-Dynamic to Dynamic. New Dynamic is used immediately.
101+-- Output updated whenever inner or outer Dynamic updates.
102+[ ] joinDyn :: Dynamic (Dynamic a) -> Dynamic a
103+[ ] joinDynThroughMap :: Ord k => Dynamic (Map k (Dynamic a)) -> Dynamic (Map k a)
105+-- Flatten Event-of-Behavior to monadic Behavior
106+[H] switcher :: Behavior a -> Event (Behavior a) -> m (Behavior a)
101### Functions producing Behavior
109### Functions producing Behavior
103```haskell
111```haskell
104-- Trivial Behavior
112-- Trivial Behavior
105−[ ] constant :: a -> Behavior a
113+[ ] constant :: a -> Behavior a
107-- Extract Behavior from Dynamic
115-- Extract Behavior from Dynamic
108−[ ] current :: Dynamic a -> Behavior a
116+[ ] current :: Dynamic a -> Behavior a
118+-- Event to monadic Behavior
119+[H] hold :: a -> Event a -> m (Behavior a)
110-- Transform Behavior to Behavior using function
121-- Transform Behavior to Behavior using function
111−[ ] fmap :: (a -> b) -> Behavior a -> Behavior b
122+[ ] fmap :: (a -> b) -> Behavior a -> Behavior b
112−[ ] ffor :: Behavior a -> (a -> b) -> Behavior b
123+[ ] ffor :: Behavior a -> (a -> b) -> Behavior b
113[ ] <*> :: Behavior (a -> b) -> Behavior a -> Behavior b
124[ ] <*> :: Behavior (a -> b) -> Behavior a -> Behavior b
114[ ] >>= :: Behavior a -> (a -> Behavior b) -> Behavior b
125[ ] >>= :: Behavior a -> (a -> Behavior b) -> Behavior b
115[ ] <> :: Monoid a => Behavior a -> Behavior a -> Behavior a
126[ ] <> :: Monoid a => Behavior a -> Behavior a -> Behavior a
127+-- ... plus many more due to typeclass membership
117-- Behavior to Behavior via monadic value
129-- Behavior to Behavior via monadic value
118[S] sample :: Behavior a -> m a
130[S] sample :: Behavior a -> m a
119−[ ] pull :: m a -> Behavior a
131+[ ] pull :: m a -> Behavior a
120 -- Note supplied value is in [S] context
132 -- Note supplied value is in [S] context
122−-- Event to monadic Behavior
123−[H] hold :: a -> Event a -> m (Behavior a)
125−-- Flatten Event-of-Behavior to monadic Behavior
126−[H] switcher :: Behavior a -> Event (Behavior a) -> m (Behavior a)
129### Functions producing Dynamic
135### Functions producing Dynamic
131```haskell
137```haskell
132-- Trivial Dynamic
138-- Trivial Dynamic
133−[ ] constDyn :: a -> Dynamic a
139+[ ] constDyn :: a -> Dynamic a
135-- Construct Dynamic from Event
141-- Construct Dynamic from Event
136−[H] holdDyn :: a -> Event a -> m (Dynamic a)
142+[H] holdDyn :: a -> Event a -> m (Dynamic a)
137−[H] foldDyn :: (a -> b -> b) -> b -> Event a -> m (Dynamic b)
143+[H] foldDyn :: (a -> b -> b) -> b -> Event a -> m (Dynamic b)
138[H] foldDynM :: (a -> b -> m' b) -> b -> Event a -> m (Dynamic b)
144[H] foldDynM :: (a -> b -> m' b) -> b -> Event a -> m (Dynamic b)
139 -- Note supplied function operates in [H] context
145 -- Note supplied function operates in [H] context
140[H] count :: Num b => Event a -> m (Dynamic b)
146[H] count :: Num b => Event a -> m (Dynamic b)
141[H] toggle :: Bool -> Event a -> m (Dynamic Bool)
147[H] toggle :: Bool -> Event a -> m (Dynamic Bool)
143-- Transform Dynamic to Dynamic using function
149-- Transform Dynamic to Dynamic using function
144−[H] mapDyn :: (a -> b) -> Dynamic a -> m (Dynamic b)
150+[H] forDyn :: Dynamic a -> (a -> b) -> m (Dynamic b)
145−[H] forDyn :: Dynamic a -> (a -> b) -> m (Dynamic b)
151+[H] mapDyn :: (a -> b) -> Dynamic a -> m (Dynamic b)
146[H] mapDynM :: (a -> m' b) -> Dynamic a -> m (Dynamic b)
152[H] mapDynM :: (a -> m' b) -> Dynamic a -> m (Dynamic b)
147 -- Note supplied function runs in [S] context
153 -- Note supplied function runs in [S] context
148[H] splitDyn :: Dynamic (a, b) -> m (Dynamic a, Dynamic b)
154[H] splitDyn :: Dynamic (a, b) -> m (Dynamic a, Dynamic b)
@@ -153,20 +159,15 @@ These functions flatten Event-of-Event, Behavior-of-Event, or Dynamic-of-Event i
153[H] combineDyn :: (a -> b -> c) -> Dynamic a -> Dynamic b -> m (Dynamic c)
159[H] combineDyn :: (a -> b -> c) -> Dynamic a -> Dynamic b -> m (Dynamic c)
155-- Efficient one-to-many fanout
161-- Efficient one-to-many fanout
156−[ ] demux :: Ord k => Dynamic k -> Demux k
162+[ ] demux :: Ord k => Dynamic k -> Demux k
157−[H] getDemuxed :: Eq k => Demux k -> k -> m (Dynamic Bool)
163+[H] getDemuxed :: Eq k => Demux k -> k -> m (Dynamic Bool)
159-- Dynamic to Dynamic, removing updates w/o value change
165-- Dynamic to Dynamic, removing updates w/o value change
160[ ] nubDyn :: Eq a => Dynamic a -> Dynamic a
166[ ] nubDyn :: Eq a => Dynamic a -> Dynamic a
162-- Dynamic to identical Dynamic with debug trace.
168-- Dynamic to identical Dynamic with debug trace.
163−[ ] traceDyn :: Show a => String -> Dynamic a -> Dynamic a
169+[ ] traceDyn :: Show a => String -> Dynamic a -> Dynamic a
164−[ ] traceDynWith :: (a -> String) -> Dynamic a -> Dynamic a
170+[ ] traceDynWith :: (a -> String) -> Dynamic a -> Dynamic a
166−-- Flatten Dynamic-of-Dynamic to Dynamic. New Dynamic is used immediately.
167−-- Output updated whenever inner or outer Dynamic updates.
168−[ ] joinDyn :: Dynamic (Dynamic a) -> Dynamic a
169−[ ] joinDynThroughMap :: Ord k => Dynamic (Map k (Dynamic a)) -> Dynamic (Map k a)
172## Reflex-Dom
173## Reflex-Dom
@@ -182,37 +183,37 @@ Widgets may return any type (this is 'a' in many of the functions below). Often
182```haskell
183```haskell
183-- Simplest form. Create a widget of given type containing the given child.
184-- Simplest form. Create a widget of given type containing the given child.
184-- Return whatever the child returns.
185-- Return whatever the child returns.
185−[W] el :: String -> m a -> m a
186+[W] el :: String -> m a -> m a
187-- This version returns the 'El' as well.
188-- This version returns the 'El' as well.
188−[W] el' :: String -> m a -> m (El, a)
189+[W] el' :: String -> m a -> m (El, a)
190−-- These two additionaly apply attributes to the element, such as ("class" =: "blah")
191+-- These two additionally apply attributes to the element, such as ("class" =: "blah")
191−[W] elAttr :: String -> Map String String -> m a -> m a
192+[W] elAttr :: String -> Map String String -> m a -> m a
192−[W] elAttr' :: String -> Map String String -> m a -> m (El, a)
193+[W] elAttr' :: String -> Map String String -> m a -> m (El, a)
194-- As above, but now the attribute map is Dynamic
195-- As above, but now the attribute map is Dynamic
195−[W] elDynAttr :: String -> Dynamic (Map String String) -> m a -> m a
196+[W] elDynAttr :: String -> Dynamic (Map String String) -> m a -> m a
196[W] elDynAttr' :: String -> Dynamic (Map String String) -> m a -> m (El, a)
197[W] elDynAttr' :: String -> Dynamic (Map String String) -> m a -> m (El, a)
198-- Shortcut for elAttr when you only want to set the "class" attribute.
199-- Shortcut for elAttr when you only want to set the "class" attribute.
199−[W] elClass :: String -> String -> m a -> m a
200+[W] elClass :: String -> String -> m a -> m a
201-- Even shorter-cut for above when element type is "div". Create a div of given class.
202-- Even shorter-cut for above when element type is "div". Create a div of given class.
202−[W] divClass :: String -> m a -> m a
203+[W] divClass :: String -> m a -> m a
204-- Create a widget of given type with arbitrary, Dymamic HTML inside.
205-- Create a widget of given type with arbitrary, Dymamic HTML inside.
205−[W] elDynHtml' :: String -> Dynamic String -> m El
206+[W] elDynHtml' :: String -> Dynamic String -> m El
206[W] elDynHtmlAttr' :: String -> Map String String -> Dynamic String -> m El
207[W] elDynHtmlAttr' :: String -> Map String String -> Dynamic String -> m El
208-- Shortcut for elDynHtml' where the type is "div" and you don't need the 'El'.
209-- Shortcut for elDynHtml' where the type is "div" and you don't need the 'El'.
209−[W] dynHtml :: Dynamic String -> m ()
210+[W] dynHtml :: Dynamic String -> m ()
211-- Create a static text element
212-- Create a static text element
212−[W] text :: String -> m ()
213+[W] text :: String -> m ()
214-- Create a dynamic text element
215-- Create a dynamic text element
215−[W] dynText :: Dynamic String -> m ()
216+[W] dynText :: Dynamic String -> m ()
216[W] display :: Show a => Dynamic a -> m ()
217[W] display :: Show a => Dynamic a -> m ()
218-- Create a "button" element with given label, return onClick Event
219-- Create a "button" element with given label, return onClick Event
@@ -229,37 +230,46 @@ In the Dynamic cases above, the *content* of a widget is dynamic but the *defini
229Note the "list" functions do not imply particular HTML tags (ul, li, etc), though the widgets they create can have those tags if you construct them appropriately.
230Note the "list" functions do not imply particular HTML tags (ul, li, etc), though the widgets they create can have those tags if you construct them appropriately.
231```haskell
232```haskell
232−-- Given a Dynamic of widget-creating actions, create a widget that is redefined whenever the Dynamic updates.
233+-- Given a Dynamic of widget-creating actions, create a widget that is redefined
234+-- whenever the Dynamic updates. The returned Event of widget results occurs when
233−-- The returned Event of widget results occurs when the Dynamic does. Note that if type 'a' is an Event, the
235+-- the Dynamic does. Note that if type 'a' is an Event, the return value is an
234−-- return value is an Event-of-Events that would typically be flattened.
236+-- Event-of-Events that would typically be flattened.
235−[W] dyn :: Dynamic (m a) -> m (Event a)
237+[W] dyn :: Dynamic (m a) -> m (Event a)
237-- Same as dyn, but takes initial value and an update Event instead of a Dynamic.
239-- Same as dyn, but takes initial value and an update Event instead of a Dynamic.
238−[W] widgetHold :: m a -> Event (m a) -> m (Dynamic a)
240+[W] widgetHold :: m a -> Event (m a) -> m (Dynamic a)
240-- Given a Dynamic key/value map and a function to create a widget for a given
242-- Given a Dynamic key/value map and a function to create a widget for a given
241-- key & Dynamic value, create a bunch of widgets. Widgets will be created,
243-- key & Dynamic value, create a bunch of widgets. Widgets will be created,
242-- destroyed, and updated appropriately as the map changes. Returns Dynamic map
244-- destroyed, and updated appropriately as the map changes. Returns Dynamic map
243-- from keys to widget results.
245-- from keys to widget results.
246+[W] listWithKey :: Ord k =>
244−[W] listWithKey :: Ord k => Dynamic (Map k v) -> (k -> Dynamic v -> m a) -> m (Dynamic (Map k a))
247+ Dynamic (Map k v) -> (k -> Dynamic v -> m a ) -> m (Dynamic (Map k a))
246-- Same as above where the widget constructor doesn't care about the key.
249-- Same as above where the widget constructor doesn't care about the key.
247−[W] list :: Ord k => Dynamic (Map k v) -> (Dynamic v -> m a) -> m (Dynamic (Map k a))
251+ Dynamic (Map k v) -> ( Dynamic v -> m a ) -> m (Dynamic (Map k a))
249-- Even simpler version where there are no keys and we just use a list.
253-- Even simpler version where there are no keys and we just use a list.
250−[W] simpleList :: Dynamic [v] -> (Dynamic v -> m a) -> m (Dynamic [a])
254+[W] simpleList ::
255+ Dynamic [v] -> ( Dynamic v -> m a ) -> m (Dynamic [a])
257+-- Like listWithKey specialized for widgets returning (Event a). listWithKey would
258+-- return 'Dynamic (Map k (Event a))' in this scenario, but listViewWithKey flattens
259+-- this to 'Event (Map k a)' via 'switch'.
260+[W] listViewWithKey :: Ord k =>
261+ Dynamic (Map k v) -> (k -> Dynamic v -> m (Event a)) -> m (Event (Map k a))
263+-- As above, but there is a "current key", and the widget constructor gets a
264+-- Dynamic Bool indicating if that widget is currently selected. The returned
265+-- Event fires when any of the widgets' returned Events fire, and returns the key
266+-- of an arbitrary firing widget.
267+[W] selectViewListWithKey_ :: Ord k => Dynamic k ->
268+ Dynamic (Map k v) -> (k -> Dynamic v -> Dynamic Bool -> m (Event a)) -> m (Event k)
252-- Same as listWithKey, but takes initial values and an updates Event instead of a Dynamic.
270-- Same as listWithKey, but takes initial values and an updates Event instead of a Dynamic.
271+[W] listWithKey' :: Ord k =>
253−[W] listWithKey' :: Ord k => Map k v -> Event (Map k (Maybe v)) -> (k -> v -> Event v -> m a) -> m (Dynamic (Map k a))
272+ Map k v -> Event (Map k (Maybe v)) -> (k -> v -> Event v -> m a) -> m (Dynamic (Map k a))
255−-- Like listWithKey specialized for widgets returning (Event a). listWithKey would return 'Dynamic (Map k (Event a))'
256−-- in this scenario, but listViewWithKey flattens this to 'Event (Map k a)' via 'switch'.
257−[W] listViewWithKey :: Ord k => Dynamic (Map k v) -> (k -> Dynamic v -> m (Event a)) -> m (Event (Map k a))
259−-- As above, but there is a "current key", and the widget constructor gets a Dynamic Bool indicating if that widget
260−-- is currently selected. The returned Event fires when any of the widgets' returned Events fire, and returns the key
261−-- of an arbitrary firing widget.
262−[W] selectViewListWithKey_ :: Ord k => Dynamic k -> Dynamic (Map k v) -> (k -> Dynamic v -> Dynamic Bool -> m (Event a)) -> m (Event k)
264-- tableDynAttr
274-- tableDynAttr
265-- tabDisplay
275-- tabDisplay
@@ -272,32 +282,39 @@ Note the "list" functions do not imply particular HTML tags (ul, li, etc), thoug
272#### Connecting to DOM events
282#### Connecting to DOM events
274```haskell
284```haskell
275−-- Extract the specified Event from an 'El'. The allowable event names, and their corresponding
285+-- Extract the specified Event from an 'El'. The allowable event names, and their
276−-- data types, are listed in Reflex/Dom/Widget/Basic.hs
286+-- corresponding data types, are listed in Reflex/Dom/Widget/Basic.hs
277[ ] domEvent :: EventName en -> El -> Event (EventResultType en)
287[ ] domEvent :: EventName en -> El -> Event (EventResultType en)
280#### Performing arbitrary I/O in response to Events
290#### Performing arbitrary I/O in response to Events
282```haskell
292```haskell
283−-- Run side-effecting actions in Event when it occurs; returned Event contains results.
293+-- Run side-effecting actions in Event when it occurs; returned Event contains
284−-- Side effects run in (WidgetHost m) monad, which includes [S] and [H] and can also do I/O via liftIO
294+-- results. Side effects run in (WidgetHost m) monad, which includes [S] and [H]
295+-- and can also do I/O via liftIO
285−[W] performEvent :: Event (WidgetHost m a) -> m (Event a)
296+[W] performEvent :: Event ( WidgetHost m a) -> m (Event a)
287-- Just run side-effects; no return Event
298-- Just run side-effects; no return Event
288−[W] performEvent_ :: Event (WidgetHost m ()) -> m ()
299+[W] performEvent_ :: Event ( WidgetHost m ()) -> m ()
290−-- Actions are run asynchronously; each action is given a callback to call when it completes
301+-- Actions run asynchronously; actions are given a callback to send return values
291[W] performEventAsync :: Event ((a -> IO ()) -> WidgetHost m ()) -> m (Event a)
302[W] performEventAsync :: Event ((a -> IO ()) -> WidgetHost m ()) -> m (Event a)
294### Startup
305### Startup
296```haskell
307```haskell
297−-- Reflex-Dom entry point. Takes a monadic widget-building action of lengthy type and turns it into an IO action.
308+-- Reflex-Dom entry point. Takes a monadic widget-building action of lengthy
309+-- type and turns it into an IO action.
298−[I] mainWidget :: Widget Spider (Gui Spider (WithWebView SpiderHost) (HostFrame Spider)) () -> IO ()
311+ Widget Spider (Gui Spider (WithWebView SpiderHost) (HostFrame Spider)) () -> IO ()
312+[I] mainWidgetWithHead ::
313+ Widget Spider (Gui Spider (WithWebView SpiderHost) (HostFrame Spider)) () ->
299−[I] mainWidgetWithHead :: Widget Spider (Gui Spider (WithWebView SpiderHost) (HostFrame Spider)) () -> Widget Spider (Gui Spider (WithWebView SpiderHost) (HostFrame Spider)) () -> IO ()
314+ Widget Spider (Gui Spider (WithWebView SpiderHost) (HostFrame Spider)) () -> IO ()
315+[I] mainWidgetWithCss ::
300−[I] mainWidgetWithCss :: ByteString -> Widget Spider (Gui Spider (WithWebView SpiderHost) (HostFrame Spider)) () -> IO ()
317+ Widget Spider (Gui Spider (WithWebView SpiderHost) (HostFrame Spider)) () -> IO ()
302-- One-shot Event that is triggered once all initial widgets are built
319-- One-shot Event that is triggered once all initial widgets are built
303[W] getPostBuild :: m (Event ())
320[W] getPostBuild :: m (Event ())