RacketUI generates a user interface based on an annotated specification of the types of data that the underlying function consumes and produces. The types of data that RacketUI supports are given by the web specs below. These are intended to correspond to the types of data used in How to Design Programs.
For the purposes of generating a user-friendly interface, specifications are annotated with text informally describing their purpose or interpretation in the context of the program.
[label spec] (constant x)where x is any value boolean number symbol string string+for non-empty strings filenamefor functions that expect the name of an input file whose content will be read, or that produce the name of a generated output file (structure constr lab-spec ...+)where constr is a structure constructor and lab-spec are one or more labeled specs corresponding to the types expected for the fields of the structure (oneof lab-spec ...+)where lab-spec are one or more labeled specs corresponding to an itemization (union) of specifications (listof lab-spec)or, for non-empty lists, (listof+ lab-spec)where lab-spec is a labeled spec describing the type of elements in the list (function purpose (proc lab-spec ...+ -> lab-spec))where purpose is a string, proc is the name of a procedure, and lab-spec are labeled specs. This form represents a specification for the given function (proc), consuming one or more parameters whose specifications precede ->, and producing data that meets the right-most specification.
It is possible to define a name for specifications that occur repeatedly:
|( id spec)|
After this, id can be used in any context where a web spec is expected.