@@ -224,28 +224,6 @@ Widgets may return any type (this is 'a' in many of the functions below). Often
224224[W] blank :: m ()
225225```
226226
227−#### Input widgets
228−
229−(These could be implemented entirely using the functions above.)
230−
231−These widget builders take a configuration record and return a record containing Events or other useful data associated with the created widget (similar to 'El'). The configuration records have default values, so you can just supply 'def'. See Reflex/Dom/Widget/Input.hs for record fields (Lenses are provided).
232−
233−look into preventDefault
234−
235−```haskell
236−-- Text input.
237−[W] textInput :: TextInputConfig -> m TextInput
238−[ ] textInputGetEnter :: TextInput -> Event ()
239−[W] textArea :: TextAreaConfig -> m TextArea
240−
241−-- Checkbox. The Bool supplies the initial state.
242−[W] checkbox :: Bool -> CheckboxConfig -> m Checkbox
243−
244−-- Dropdown with Dynamic options. First argument is initial state.
245−[W] dropdown :: (Ord k, Show k, Read k) =>
246− k -> Dynamic (Map k String) -> DropdownConfig k -> m (Dropdown k)
247−```
248−
249227#### Dynamic widgets
250228
251229In the Dynamic cases so far, the *content* of a widget is dynamic but the *definition* of the widget is static. The functions below enable the definition and/or structure of the widget itself to change over time.
@@ -300,6 +278,33 @@ Note the "list" functions do not imply particular HTML tags (ul, li, etc), thoug
300278-- workflowView
301279```
302280
281+#### Utility widgets
282+
283+These are useful widgets that are implemented (or could be implemented) in terms of the low-level widgets above.
284+
285+Some of these widget builders take a configuration record and return a record containing Events or other useful data associated with the created widget (similar to 'El'). The configuration records have default values, so you can just supply 'def'. See Reflex/Dom/Widget/Input.hs for record fields (Lenses are provided).
286+
287+```haskell
288+-- Text input.
289+[W] textInput :: TextInputConfig -> m TextInput
290+[ ] textInputGetEnter :: TextInput -> Event ()
291+[W] textArea :: TextAreaConfig -> m TextArea
292+
293+-- Checkbox. The Bool supplies the initial state.
294+[W] checkbox :: Bool -> CheckboxConfig -> m Checkbox
295+
296+-- Dropdown with Dynamic options. First argument is initial state.
297+[W] dropdown :: (Ord k, Show k, Read k) =>
298+ k -> Dynamic (Map k String) -> DropdownConfig k -> m (Dropdown k)
299+
300+-- Widget to efficiently display long scrolling lists. Dynamically control number of items in
301+-- list, current scroll position, attributes, and row content. Returns current scroll position
302+-- and current selection. Full documentation in Reflex/Dom/Widget/Lazy.hs
303+[W] virtualListWithSelection :: Ord k => Int -> Int -> Dynamic Int -> Int -> Event Int ->
304+ String -> Dynamic (Map String String) -> String -> Dynamic (Map String String) ->
305+ (k -> Dynamic v -> m ()) -> Dynamic (Map k v) -> m (Dynamic (Int, Int), Event k)
306+```
307+
303308### Connecting to the real world (I/O)
304309
305310#### Connecting to DOM events
@@ -325,6 +330,39 @@ Note the "list" functions do not imply particular HTML tags (ul, li, etc), thoug
325330[W] performEventAsync :: Event ((a -> IO ()) -> WidgetHost m ()) -> m (Event a)
326331```
327332
333+#### XMLHttpRequest
334+
335+Convenience functions for XMLHttpRequest. For configuration field details, see Reflex/Dom/Xhr.hs.
336+
337+```haskell
338+-- Given method, URL, and config record (with default instance), construct a request.
339+[ ] xhrRequest :: String -> String -> XhrRequestConfig -> XhrRequest
340+
341+-- Given Event of requests, issue them and produce Event of responses.
342+[W] performRequestAsync :: Event XhrRequest -> m (Event XhrResponse)
343+
344+-- Issue a collection of requests, wait for them ALL to complete, return collected results.
345+[W] performRequestsAsync :: Traversable f => Event (f XhrRequest) -> m (Event (f XhrResponse))
346+
347+-- Convenience function to decode JSON-encoded response.
348+[ ] decodeXhrResponse :: FromJSON a => XhrResponse -> Maybe a
349+
350+-- Simplified interface to "GET" URLs and return decoded results.
351+[W] getAndDecode :: FromJSON a => Event String -> m (Event (Maybe a))
352+```
353+
354+#### Time
355+
356+```haskell
357+-- Given a time interval in seconds and a basis time, create an Event that fires on the given
358+-- interval. The Event will report the number of time intervals elapsed since the basis time
359+-- (and other info, see Reflex/Dom/Time.hs). High load will cause ticks to be dropped.
360+[W] tickLossy :: NominalDiffTime -> UTCTime -> m (Event t TickInfo)
361+
362+-- Delay an Event's occurences by a given amount in seconds.
363+[W] delay :: NominalDiffTime -> Event t a -> m (Event t a)
364+```
365+
328366### Startup
329367
330368```haskell