A library to support the type-oriented construction of Web User Interfaces
(WUIs).
The ideas behind the application and implementation of WUIs are
described in a paper that is available via
this web page.
Author: Michael Hanus
Version: February 2007
| Exported names: |
Datatypes:
Rendering
| WTree
| WuiHandler
| WuiSpec
Functions:
adaptWSpec
| mainWUI
| renderList
| renderTaggedTuple
| renderTuple
| transformWSpec
| w10Tuple
| w11Tuple
| w4Tuple
| w5Tuple
| w6Tuple
| w7Tuple
| w8Tuple
| w9Tuple
| wCheckBool
| wCheckMaybe
| wCons10
| wCons11
| wCons2
| wCons3
| wCons4
| wCons5
| wCons6
| wCons7
| wCons8
| wCons9
| wConstant
| wEither
| wHidden
| wHList
| withCondition
| withError
| withRendering
| wInt
| wList
| wListWithHeadings
| wMatrix
| wMaybe
| wMultiCheckSelect
| wPair
| wRadioBool
| wRadioMaybe
| wRadioSelect
| wRequiredString
| wRequiredStringSize
| wSelect
| wSelectBool
| wSelectInt
| wString
| wStringSize
| wTextArea
| wTree
| wTriple
| wui2html
| wuiHandler2button
| wuiInForm
| wuiWithErrorForm
| Summary of exported functions: |
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
| Imported modules: |
| Exported datatypes: |
A rendering is a function that combines the visualization of components of a data structure into some HTML expression.
Type synonym: Rendering = [HtmlExp] -> HtmlExp
A handler for a WUI is an event handler for HTML forms possibly with some specific code attached (for future extensions).
Constructors:
The type of WUI specifications. The first component are parameters specifying the behavior of this WUI type (rendering, error message, and constraints on inputs). The second component is a "show" function returning an HTML expression for the edit fields and a WUI state containing the CgiRefs to extract the values from the edit fields. The third component is "read" function to extract the values from the edit fields for a given cgi environment (returned as (Just v)). If the value is not legal, Nothing is returned. The second component of the result contains an HTML edit expression together with a WUI state to edit the value again.
Constructors:
A simple tree structure to demonstrate the construction of WUIs for tree types.
Constructors:
:: a -> WTree a
:: [WTree a] -> WTree a
| Exported functions: |
:: String -> WuiHandler -> HtmlExp
Transform a WUI handler into a submit button with a given label string.
:: WuiSpec a -> ([HtmlExp] -> HtmlExp) -> WuiSpec a
Puts a new rendering function into a WUI specification.
:: WuiSpec a -> String -> WuiSpec a
Puts a new error message into a WUI specification.
:: WuiSpec a -> (a -> Bool) -> WuiSpec a
Puts a new condition into a WUI specification.
:: (a -> b,b -> a) -> WuiSpec a -> WuiSpec b
Transforms a WUI specification from one type to another.
:: (a -> b) -> WuiSpec a -> WuiSpec b
Adapt a WUI specification to a new type. For this purpose,
the first argument must be a transformation mapping values
from the old type to the new type. This function must be bijective
and operationally invertible (i.e., the inverse must be computable
by narrowing). Otherwise, use transformWSpec!
:: WuiSpec a
A hidden widget for a value that is not shown in the WUI. Usually, this is used in components of larger structures, e.g., internal identifiers, data base keys.
:: (a -> HtmlExp) -> WuiSpec a
A widget for values that are shown but cannot be modified. The first argument is a mapping of the value into a HTML expression to show this value.
:: WuiSpec Int
A widget for editing integer values.
:: WuiSpec String
A widget for editing string values.
:: Int -> WuiSpec String
A widget for editing string values with a size attribute.
:: WuiSpec String
A widget for editing string values that are required to be non-empty.
:: Int -> WuiSpec String
A widget with a size attribute for editing string values that are required to be non-empty.
:: (Int,Int) -> WuiSpec String
A widget for editing string values in a text area. The argument specifies the height and width of the text area.
:: (a -> String) -> [a] -> WuiSpec a
A widget to select a value from a given list of values. The current value should be contained in the value list and is preselected. The first argument is a mapping from values into strings to be shown in the selection widget.
:: [Int] -> WuiSpec Int
A widget to select a value from a given list of integers (provided as the argument). The current value should be contained in the value list and is preselected.
:: String -> String -> WuiSpec Bool
A widget to select a Boolean value via a selection box. The arguments are the strings that are shown for the values True and False in the selection box, respectively.
Example call: (wSelectBool true false)
true
- string for selection of True
false
- string for selection of False
:: [HtmlExp] -> WuiSpec Bool
A widget to select a Boolean value via a check box. The first argument are HTML expressions that are shown after the check box. The result is True if the box is checked.
:: (a -> [HtmlExp]) -> [a] -> WuiSpec [a]
A widget to select a list of values from a given list of values via check boxes. The current values should be contained in the value list and are preselected. The first argument is a mapping from values into HTML expressions that are shown for each item after the check box.
:: (a -> [HtmlExp]) -> [a] -> WuiSpec a
A widget to select a value from a given list of values via a radio button. The current value should be contained in the value list and is preselected. The first argument is a mapping from values into HTML expressions that are shown for each item after the radio button.
:: [HtmlExp] -> [HtmlExp] -> WuiSpec Bool
A widget to select a Boolean value via a radio button. The arguments are the lists of HTML expressions that are shown after the True and False radio buttons, respectively.
Example call: (wRadioBool true false)
true
- HTML expressions for True radio button
false
- HTML expressions for False radio button
:: WuiSpec a -> WuiSpec b -> WuiSpec (a,b)
WUI combinator for pairs.
:: (a -> b -> c) -> WuiSpec a -> WuiSpec b -> WuiSpec c
WUI combinator for constructors of arity 2. The first argument is the binary constructor. The second and third arguments are the WUI specifications for the argument types.
:: WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec (a,b,c)
WUI combinator for triples.
:: (a -> b -> c -> d) -> WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d
WUI combinator for constructors of arity 3. The first argument is the ternary constructor. The further arguments are the WUI specifications for the argument types.
:: WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec (a,b,c,d)
WUI combinator for tuples of arity 4.
:: (a -> b -> c -> d -> e) -> WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec e
WUI combinator for constructors of arity 4. The first argument is the ternary constructor. The further arguments are the WUI specifications for the argument types.
:: WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec e -> WuiSpec (a,b,c,d,e)
WUI combinator for tuples of arity 5.
:: (a -> b -> c -> d -> e -> f) -> WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec e -> WuiSpec f
WUI combinator for constructors of arity 5. The first argument is the ternary constructor. The further arguments are the WUI specifications for the argument types.
:: WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec e -> WuiSpec f -> WuiSpec (a,b,c,d,e,f)
WUI combinator for tuples of arity 6.
:: (a -> b -> c -> d -> e -> f -> g) -> WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec e -> WuiSpec f -> WuiSpec g
WUI combinator for constructors of arity 6. The first argument is the ternary constructor. The further arguments are the WUI specifications for the argument types.
:: WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec e -> WuiSpec f -> WuiSpec g -> WuiSpec (a,b,c,d,e,f,g)
WUI combinator for tuples of arity 7.
:: (a -> b -> c -> d -> e -> f -> g -> h) -> WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec e -> WuiSpec f -> WuiSpec g -> WuiSpec h
WUI combinator for constructors of arity 7. The first argument is the ternary constructor. The further arguments are the WUI specifications for the argument types.
:: WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec e -> WuiSpec f -> WuiSpec g -> WuiSpec h -> WuiSpec (a,b,c,d,e,f,g,h)
WUI combinator for tuples of arity 8.
:: (a -> b -> c -> d -> e -> f -> g -> h -> i) -> WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec e -> WuiSpec f -> WuiSpec g -> WuiSpec h -> WuiSpec i
WUI combinator for constructors of arity 8. The first argument is the ternary constructor. The further arguments are the WUI specifications for the argument types.
:: WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec e -> WuiSpec f -> WuiSpec g -> WuiSpec h -> WuiSpec i -> WuiSpec (a,b,c,d,e,f,g,h,i)
WUI combinator for tuples of arity 9.
:: (a -> b -> c -> d -> e -> f -> g -> h -> i -> j) -> WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec e -> WuiSpec f -> WuiSpec g -> WuiSpec h -> WuiSpec i -> WuiSpec j
WUI combinator for constructors of arity 9. The first argument is the ternary constructor. The further arguments are the WUI specifications for the argument types.
:: WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec e -> WuiSpec f -> WuiSpec g -> WuiSpec h -> WuiSpec i -> WuiSpec j -> WuiSpec (a,b,c,d,e,f,g,h,i,j)
WUI combinator for tuples of arity 10.
:: (a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k) -> WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec e -> WuiSpec f -> WuiSpec g -> WuiSpec h -> WuiSpec i -> WuiSpec j -> WuiSpec k
WUI combinator for constructors of arity 10. The first argument is the ternary constructor. The further arguments are the WUI specifications for the argument types.
:: WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec e -> WuiSpec f -> WuiSpec g -> WuiSpec h -> WuiSpec i -> WuiSpec j -> WuiSpec k -> WuiSpec (a,b,c,d,e,f,g,h,i,j,k)
WUI combinator for tuples of arity 11.
:: (a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l) -> WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec e -> WuiSpec f -> WuiSpec g -> WuiSpec h -> WuiSpec i -> WuiSpec j -> WuiSpec k -> WuiSpec l
WUI combinator for constructors of arity 11. The first argument is the ternary constructor. The further arguments are the WUI specifications for the argument types.
:: WuiSpec a -> WuiSpec [a]
WUI combinator for list structures where the list elements are vertically aligned in a table.
:: [String] -> WuiSpec a -> WuiSpec [a]
Add headings to a standard WUI for list structures:
:: WuiSpec a -> WuiSpec [a]
WUI combinator for list structures where the list elements are horizontally aligned in a table.
:: WuiSpec a -> WuiSpec [[a]]
WUI for matrices, i.e., list of list of elements visualized as a matrix.
:: WuiSpec Bool -> WuiSpec a -> a -> WuiSpec (Maybe a)
WUI for Maybe values. It is constructed from a WUI for Booleans and a WUI for the potential values. Nothing corresponds to a selection of False in the Boolean WUI. The value WUI is shown after the Boolean WUI.
Example call: (wMaybe wspecb wspeca def)
wspecb
- a WUI specification for Boolean values
wspeca
- a WUI specification for the type of potential values
def
- a default value that is used if the current value is Nothing
:: WuiSpec a -> [HtmlExp] -> a -> WuiSpec (Maybe a)
A WUI for Maybe values where a check box is used to select Just. The value WUI is shown after the check box.
Example call: (wCheckMaybe wspec hexps def)
wspec
- a WUI specification for the type of potential values
hexps
- a list of HTML expressions shown after the check box
def
- a default value if the current value is Nothing
:: WuiSpec a -> [HtmlExp] -> [HtmlExp] -> a -> WuiSpec (Maybe a)
A WUI for Maybe values where radio buttons are used to switch between Nothing and Just. The value WUI is shown after the radio button WUI.
Example call: (wRadioMaybe wspec hexps hexps def)
wspec
- a WUI specification for the type of potential values
hexps
- a list of HTML expressions shown after the Nothing button
hexps
- a list of HTML expressions shown after the Just button
def
- a default value if the current value is Nothing
:: WuiSpec a -> WuiSpec b -> WuiSpec (Either a b)
WUI for union types. Here we provide only the implementation for Either types since other types with more alternatives can be easily reduced to this case.
:: WuiSpec a -> WuiSpec (WTree a)
WUI for tree types. The rendering specifies the rendering of inner nodes. Leaves are shown with their default rendering.
:: [HtmlExp] -> HtmlExp
Standard rendering of tuples as a table with a single row. Thus, the elements are horizontally aligned.
:: [String] -> [HtmlExp] -> HtmlExp
Standard rendering of tuples with a tag for each element. Thus, each is preceded by a tag, that is set in bold, and all elements are vertically aligned.
:: [HtmlExp] -> HtmlExp
Standard rendering of lists as a table with a row for each item: Thus, the elements are vertically aligned.
:: WuiSpec a -> a -> (a -> IO HtmlForm) -> IO HtmlForm
Generates an HTML form from a WUI data specification, an initial value and an update form.
:: WuiSpec a -> a -> (a -> IO HtmlForm) -> (HtmlExp,WuiHandler)
Generates HTML editors and a handler from a WUI data specification, an initial value and an update form.
:: WuiSpec a -> a -> (a -> IO HtmlForm) -> (HtmlExp -> WuiHandler -> HtmlForm) -> IO HtmlForm
Puts a WUI into a HTML form containing "holes" for the WUI and the handler.
:: WuiSpec a -> a -> (a -> IO HtmlForm) -> (HtmlExp -> WuiHandler -> HtmlForm) -> (HtmlExp,WuiHandler)
Generates HTML editors and a handler from a WUI data specification, an initial value and an update form. In addition to wui2html, we can provide a skeleton form used to show illegal inputs.