Module WUIjs

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.

In addition to the original library, this version provides also support for JavaScript.

Author: Michael Hanus

Version: February, 2009

Summary of exported operations:

wuiHandler2button :: String -> WuiHandler -> HtmlExp   
Transform a WUI handler into a submit button with a given label string.
withRendering :: WuiSpec a -> ([HtmlExp] -> HtmlExp) -> WuiSpec a   
Puts a new rendering function into a WUI specification.
withError :: WuiSpec a -> String -> WuiSpec a   
Puts a new error message into a WUI specification.
withCondition :: WuiSpec a -> (a -> Bool) -> WuiSpec a   
Puts a new condition into a WUI specification.
withConditionJS :: WuiSpec a -> (a -> Bool) -> WuiSpec a   
Puts a new JavaScript implementation of the condition into a WUI specification.
withConditionJSName :: WuiSpec a -> (a -> Bool,String) -> WuiSpec a   
Puts a new JavaScript implementation of the condition into a WUI specification.
transformWSpec :: (a -> b,b -> a) -> WuiSpec a -> WuiSpec b   
Transforms a WUI specification from one type to another.
adaptWSpec :: (a -> b) -> WuiSpec a -> WuiSpec b   
Adapt a WUI specification to a new type.
wHidden :: WuiSpec a   
A hidden widget for a value that is not shown in the WUI.
wConstant :: (a -> HtmlExp) -> WuiSpec a   
A widget for values that are shown but cannot be modified.
wInt :: WuiSpec Int   
A widget for editing integer values.
wString :: WuiSpec String   
A widget for editing string values.
wStringSize :: Int -> WuiSpec String   
A widget for editing string values with a size attribute.
wRequiredString :: WuiSpec String   
A widget for editing string values that are required to be non-empty.
wRequiredStringSize :: Int -> WuiSpec String   
A widget with a size attribute for editing string values that are required to be non-empty.
wTextArea :: (Int,Int) -> WuiSpec String   
A widget for editing string values in a text area.
wSelect :: (a -> String) -> [a] -> WuiSpec a   
A widget to select a value from a given list of values.
wSelectInt :: [Int] -> WuiSpec Int   
A widget to select a value from a given list of integers (provided as the argument).
wSelectBool :: String -> String -> WuiSpec Bool   
A widget to select a Boolean value via a selection box.
wCheckBool :: [HtmlExp] -> WuiSpec Bool   
A widget to select a Boolean value via a check box.
wMultiCheckSelect :: (a -> [HtmlExp]) -> [a] -> WuiSpec [a]   
A widget to select a list of values from a given list of values via check boxes.
wRadioSelect :: (a -> [HtmlExp]) -> [a] -> WuiSpec a   
A widget to select a value from a given list of values via a radio button.
wRadioBool :: [HtmlExp] -> [HtmlExp] -> WuiSpec Bool   
A widget to select a Boolean value via a radio button.
wJoinTuple :: WuiSpec a -> WuiSpec b -> WuiSpec (a,b)   
WUI combinator to combine two tuples into a joint tuple.
wPair :: WuiSpec a -> WuiSpec b -> WuiSpec (a,b)   
WUI combinator for pairs.
wCons2 :: (a -> b -> c) -> WuiSpec a -> WuiSpec b -> WuiSpec c   
WUI combinator for constructors of arity 2.
wCons2JS :: Maybe ([JSExp] -> JSExp) -> (a -> b -> c) -> WuiSpec a -> WuiSpec b -> WuiSpec c   
wTriple :: WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec (a,b,c)   
WUI combinator for triples.
wCons3 :: (a -> b -> c -> d) -> WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d   
WUI combinator for constructors of arity 3.
wCons3JS :: Maybe ([JSExp] -> JSExp) -> (a -> b -> c -> d) -> WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d   
w4Tuple :: WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec (a,b,c,d)   
WUI combinator for tuples of arity 4.
wCons4 :: (a -> b -> c -> d -> e) -> WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec e   
WUI combinator for constructors of arity 4.
wCons4JS :: Maybe ([JSExp] -> JSExp) -> (a -> b -> c -> d -> e) -> WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec e   
w5Tuple :: WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec e -> WuiSpec (a,b,c,d,e)   
WUI combinator for tuples of arity 5.
wCons5 :: (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.
wCons5JS :: Maybe ([JSExp] -> JSExp) -> (a -> b -> c -> d -> e -> f) -> WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec e -> WuiSpec f   
w6Tuple :: 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.
wCons6 :: (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.
wCons6JS :: Maybe ([JSExp] -> JSExp) -> (a -> b -> c -> d -> e -> f -> g) -> WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec e -> WuiSpec f -> WuiSpec g   
w7Tuple :: 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.
wCons7 :: (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.
wCons7JS :: Maybe ([JSExp] -> JSExp) -> (a -> b -> c -> d -> e -> f -> g -> h) -> WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec e -> WuiSpec f -> WuiSpec g -> WuiSpec h   
w8Tuple :: 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.
wCons8 :: (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.
wCons8JS :: Maybe ([JSExp] -> JSExp) -> (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   
w9Tuple :: 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.
wCons9 :: (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.
wCons9JS :: Maybe ([JSExp] -> JSExp) -> (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   
w10Tuple :: 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.
wCons10 :: (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.
wCons10JS :: Maybe ([JSExp] -> JSExp) -> (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   
w11Tuple :: 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.
wCons11 :: (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.
wCons11JS :: Maybe ([JSExp] -> JSExp) -> (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   
w12Tuple :: WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec e -> WuiSpec f -> WuiSpec g -> WuiSpec h -> WuiSpec i -> WuiSpec j -> WuiSpec k -> WuiSpec l -> WuiSpec (a,b,c,d,e,f,g,h,i,j,k,l)   
WUI combinator for tuples of arity 12.
wCons12 :: (a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m) -> WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec e -> WuiSpec f -> WuiSpec g -> WuiSpec h -> WuiSpec i -> WuiSpec j -> WuiSpec k -> WuiSpec l -> WuiSpec m   
WUI combinator for constructors of arity 12.
wCons12JS :: Maybe ([JSExp] -> JSExp) -> (a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m) -> WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec e -> WuiSpec f -> WuiSpec g -> WuiSpec h -> WuiSpec i -> WuiSpec j -> WuiSpec k -> WuiSpec l -> WuiSpec m   
wList :: WuiSpec a -> WuiSpec [a]   
WUI combinator for list structures where the list elements are vertically aligned in a table.
wListWithHeadings :: [String] -> WuiSpec a -> WuiSpec [a]   
Add headings to a standard WUI for list structures:
wHList :: WuiSpec a -> WuiSpec [a]   
WUI combinator for list structures where the list elements are horizontally aligned in a table.
wMatrix :: WuiSpec a -> WuiSpec [[a]]   
WUI for matrices, i.e., list of list of elements visualized as a matrix.
wMaybe :: WuiSpec Bool -> WuiSpec a -> a -> WuiSpec (Maybe a)   
WUI for Maybe values.
wCheckMaybe :: WuiSpec a -> [HtmlExp] -> a -> WuiSpec (Maybe a)   
A WUI for Maybe values where a check box is used to select Just.
wRadioMaybe :: WuiSpec a -> [HtmlExp] -> [HtmlExp] -> a -> WuiSpec (Maybe a)   
A WUI for Maybe values where radio buttons are used to switch between Nothing and Just.
wEither :: WuiSpec a -> WuiSpec b -> WuiSpec (Either a b)   
WUI for union types.
wTree :: WuiSpec a -> WuiSpec (WTree a)   
WUI for tree types.
renderTuple :: [HtmlExp] -> HtmlExp   
Standard rendering of tuples as a table with a single row.
renderTaggedTuple :: [String] -> [HtmlExp] -> HtmlExp   
Standard rendering of tuples with a tag for each element.
renderList :: [HtmlExp] -> HtmlExp   
Standard rendering of lists as a table with a row for each item: Thus, the elements are vertically aligned.
mainWUI :: WuiSpec a -> a -> (a -> IO HtmlForm) -> IO HtmlForm   
Generates an HTML form from a WUI data specification, an initial value and an update form.
wui2html :: 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.
wuiInForm :: WuiSpec a -> a -> (a -> IO HtmlForm) -> (HtmlExp -> WuiHandler -> IO HtmlForm) -> IO HtmlForm   
Puts a WUI into a HTML form containing "holes" for the WUI and the handler.
wuiWithErrorForm :: WuiSpec a -> a -> (a -> IO HtmlForm) -> (HtmlExp -> WuiHandler -> IO HtmlForm) -> (HtmlExp,WuiHandler)   
Generates HTML editors and a handler from a WUI data specification, an initial value and an update form.

Exported datatypes:


Rendering

A rendering is a function that combines the visualization of components of a data structure into some HTML expression.

Type synonym: Rendering = [HtmlExp] -> HtmlExp


WuiHandler

A handler for a WUI is an event handler for HTML forms possibly with some specific JavaScript code attached.

Constructors:


WuiSpec

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:


WTree

A simple tree structure to demonstrate the construction of WUIs for tree types.

Constructors:

  • WLeaf :: a -> WTree a
  • WNode :: [WTree a] -> WTree a

Exported operations:

wuiHandler2button :: String -> WuiHandler -> HtmlExp   

Transform a WUI handler into a submit button with a given label string.

withRendering :: WuiSpec a -> ([HtmlExp] -> HtmlExp) -> WuiSpec a   

Puts a new rendering function into a WUI specification.

Further infos:
  • defined as left-associative infix operator with precedence 0
  • solution complete, i.e., able to compute all solutions

withError :: WuiSpec a -> String -> WuiSpec a   

Puts a new error message into a WUI specification.

Further infos:
  • defined as left-associative infix operator with precedence 0
  • solution complete, i.e., able to compute all solutions

withCondition :: WuiSpec a -> (a -> Bool) -> WuiSpec a   

Puts a new condition into a WUI specification.

Further infos:
  • defined as left-associative infix operator with precedence 0
  • solution complete, i.e., able to compute all solutions

withConditionJS :: WuiSpec a -> (a -> Bool) -> WuiSpec a   

Puts a new JavaScript implementation of the condition into a WUI specification.

Further infos:
  • defined as left-associative infix operator with precedence 0
  • solution complete, i.e., able to compute all solutions

withConditionJSName :: WuiSpec a -> (a -> Bool,String) -> WuiSpec a   

Puts a new JavaScript implementation of the condition into a WUI specification.

transformWSpec :: (a -> b,b -> a) -> WuiSpec a -> WuiSpec b   

Transforms a WUI specification from one type to another.

adaptWSpec :: (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!

wHidden :: 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.

wConstant :: (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.

wInt :: WuiSpec Int   

A widget for editing integer values.

wString :: WuiSpec String   

A widget for editing string values.

wStringSize :: Int -> WuiSpec String   

A widget for editing string values with a size attribute.

wRequiredString :: WuiSpec String   

A widget for editing string values that are required to be non-empty.

wRequiredStringSize :: Int -> WuiSpec String   

A widget with a size attribute for editing string values that are required to be non-empty.

wTextArea :: (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.

wSelect :: (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.

wSelectInt :: [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.

wSelectBool :: 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)
Parameters:
  • true : string for selection of True
  • false : string for selection of False
Returns:
a WUI specification for a Boolean selection widget

wCheckBool :: [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.

wMultiCheckSelect :: (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.

wRadioSelect :: (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.

wRadioBool :: [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)
Parameters:
  • true : HTML expressions for True radio button
  • false : HTML expressions for False radio button
Returns:
a WUI specification for a Boolean selection widget

wJoinTuple :: WuiSpec a -> WuiSpec b -> WuiSpec (a,b)   

WUI combinator to combine two tuples into a joint tuple. It is similar to wPair but renders both components as a single tuple provided that the components are already rendered as tuples, i.e., by the rendering function renderTuple. This combinator is useful to define combinators for large tuples.

wPair :: WuiSpec a -> WuiSpec b -> WuiSpec (a,b)   

WUI combinator for pairs.

wCons2 :: (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.

wCons2JS :: Maybe ([JSExp] -> JSExp) -> (a -> b -> c) -> WuiSpec a -> WuiSpec b -> WuiSpec c   

wTriple :: WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec (a,b,c)   

WUI combinator for triples.

wCons3 :: (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.

wCons3JS :: Maybe ([JSExp] -> JSExp) -> (a -> b -> c -> d) -> WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d   

w4Tuple :: WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec (a,b,c,d)   

WUI combinator for tuples of arity 4.

wCons4 :: (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.

wCons4JS :: Maybe ([JSExp] -> JSExp) -> (a -> b -> c -> d -> e) -> WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec e   

w5Tuple :: WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec e -> WuiSpec (a,b,c,d,e)   

WUI combinator for tuples of arity 5.

wCons5 :: (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.

wCons5JS :: Maybe ([JSExp] -> JSExp) -> (a -> b -> c -> d -> e -> f) -> WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec e -> WuiSpec f   

w6Tuple :: 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.

wCons6 :: (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.

wCons6JS :: Maybe ([JSExp] -> JSExp) -> (a -> b -> c -> d -> e -> f -> g) -> WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec e -> WuiSpec f -> WuiSpec g   

w7Tuple :: 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.

wCons7 :: (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.

wCons7JS :: Maybe ([JSExp] -> JSExp) -> (a -> b -> c -> d -> e -> f -> g -> h) -> WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec e -> WuiSpec f -> WuiSpec g -> WuiSpec h   

w8Tuple :: 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.

wCons8 :: (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.

wCons8JS :: Maybe ([JSExp] -> JSExp) -> (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   

w9Tuple :: 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.

wCons9 :: (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.

wCons9JS :: Maybe ([JSExp] -> JSExp) -> (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   

w10Tuple :: 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.

wCons10 :: (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.

wCons10JS :: Maybe ([JSExp] -> JSExp) -> (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   

w11Tuple :: 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.

wCons11 :: (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.

wCons11JS :: Maybe ([JSExp] -> JSExp) -> (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   

w12Tuple :: WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec e -> WuiSpec f -> WuiSpec g -> WuiSpec h -> WuiSpec i -> WuiSpec j -> WuiSpec k -> WuiSpec l -> WuiSpec (a,b,c,d,e,f,g,h,i,j,k,l)   

WUI combinator for tuples of arity 12.

wCons12 :: (a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m) -> WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec e -> WuiSpec f -> WuiSpec g -> WuiSpec h -> WuiSpec i -> WuiSpec j -> WuiSpec k -> WuiSpec l -> WuiSpec m   

WUI combinator for constructors of arity 12. The first argument is the ternary constructor. The further arguments are the WUI specifications for the argument types.

wCons12JS :: Maybe ([JSExp] -> JSExp) -> (a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m) -> WuiSpec a -> WuiSpec b -> WuiSpec c -> WuiSpec d -> WuiSpec e -> WuiSpec f -> WuiSpec g -> WuiSpec h -> WuiSpec i -> WuiSpec j -> WuiSpec k -> WuiSpec l -> WuiSpec m   

wList :: WuiSpec a -> WuiSpec [a]   

WUI combinator for list structures where the list elements are vertically aligned in a table.

wListWithHeadings :: [String] -> WuiSpec a -> WuiSpec [a]   

Add headings to a standard WUI for list structures:

wHList :: WuiSpec a -> WuiSpec [a]   

WUI combinator for list structures where the list elements are horizontally aligned in a table.

wMatrix :: WuiSpec a -> WuiSpec [[a]]   

WUI for matrices, i.e., list of list of elements visualized as a matrix.

wMaybe :: 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)
Parameters:
  • 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

wCheckMaybe :: 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)
Parameters:
  • 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

wRadioMaybe :: 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)
Parameters:
  • 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

wEither :: 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.

wTree :: WuiSpec a -> WuiSpec (WTree a)   

WUI for tree types. The rendering specifies the rendering of inner nodes. Leaves are shown with their default rendering.

renderTuple :: [HtmlExp] -> HtmlExp   

Standard rendering of tuples as a table with a single row. Thus, the elements are horizontally aligned.

renderTaggedTuple :: [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.

renderList :: [HtmlExp] -> HtmlExp   

Standard rendering of lists as a table with a row for each item: Thus, the elements are vertically aligned.

mainWUI :: WuiSpec a -> a -> (a -> IO HtmlForm) -> IO HtmlForm   

Generates an HTML form from a WUI data specification, an initial value and an update form.

wui2html :: 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.

wuiInForm :: WuiSpec a -> a -> (a -> IO HtmlForm) -> (HtmlExp -> WuiHandler -> IO HtmlForm) -> IO HtmlForm   

Puts a WUI into a HTML form containing "holes" for the WUI and the handler.

wuiWithErrorForm :: WuiSpec a -> a -> (a -> IO HtmlForm) -> (HtmlExp -> WuiHandler -> IO 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.