Readability and hence maintainability is one advantage of highly composed forms, since they require fewer lines of code, minimizing a program's "surface area".
In a stack-based language, functional composition is even more natural: it is performed by concatenation, and is usually the primary method of program design.
which can be read as f after g or g composed with f. The composition operator ∘ itself can be defined in Haskell using a lambda expression: The first line describes the type of (.)
Note that Haskell doesn't require specification of the exact input and output types of f and g; the a, b, c, and x are placeholders; only the relation between f, g matters (f must accept what g returns).
Variants of Lisp, especially Scheme, the interchangeability of code and data together with the treatment of functions lend themselves extremely well for a recursive definition of a variadic compositional operator.
Whole programs or systems can be treated as functions, which can be readily composed if their inputs and outputs are well-defined.
[5] Pipelines allowing easy composition of filters were so successful that they became a design pattern of operating systems.
Imperative procedures with side effects violate referential transparency and therefore are not cleanly composable.
However if one considers the "state of the world" before and after running the code as its input and output, one gets a clean function.