Values from selectors and transforms are curried or passed to the subsequent selector or transform in the expression. This allows the expression to read left-to-right and describes changes to the value in that order. Currying allows writing selectors (which invoke engine functions) and transforms (which invoke viewer functions) in a functional programming style.
Currying removes ambiguities in the source of values since they are explicitly stated before the selector or transform. It simplifies understanding of data flow through external functions because only one value can be passed between them and the order of passing is explicit in the expression.
(@EPCOT Experimental Prototype Community of Tomorrow /\b[A-Za-z]/g (f upper)) ⇒ EPCOT (@WED (@WALT Walt Disney /\w+\s\w+/ Walter Elias /\b[A-Z]/g)) ⇒ WED (@ATIS Adventure Thru Inner Space (f translate :fr en :to es) (f bold)) ⇒ Aventura a Través de Espacio Interior (@arrow Arrow Dynamics, Inc. /(^[\w\s]+)[,]\1/g (f bold) /\w+/ (f italic)) ⇒ Arrow Dynamics
In the first example, the result of the regex selector is curried to the format transform. In example two, the regex match is replaced by the succeeding value, then the entire previous value with the replacement made is curried to the second selector. In the third example, The result of a format transform which returns a value is curried to the succeeding format transform to alter its appearance. In the last example, the regex result is transformed and then further sub-selected by a second regex before being formatted by a transform.