An INPUT is a typed parameter a function receives from its caller.
The grammar of a single INPUT line:
An INPUT keyword can live inside FUNCTION and HOLE keywords.
A parameter of the function, declared before the body; the caller supplies its value on every call.
The first input is forward (read-only); the second carries the BINDING modifier, so the function both reads formData and writes back to it. The same inputs stand whether the function has a Program body or per-target NATIVE bodies — they are the values each native body receives.
One of the arguments the callback block receives each time the function invokes the hole.
The renderField hole's indented INPUT , fieldLabel , is the argument the caller's block is given each time the function invokes it — a plain forward input.
An INPUT is a leaf: a type and a name, and no keyword nested inside. It opens no indented lines of its own. (Inside a HOLE , the indented lines are the hole's own inputs, not the input's.)
One optional modifier may sit before the type:
Written before the type, BINDING switches the parameter from forward (read-only) to two-way (read and write), so the function can write back through it — usually into a caller's STATE . It is a modifier, not a keyword of its own: it has no body and adds no line of its own, it only changes how the input behaves.
The same example, rendered to each target.
A callback parameter is a HOLE instead; the write-back a BINDING input enables is performed with REVERSE . Inputs belong to a FUNCTION , and often carry record or union TYPE values. Back to the language .