I’ve been working my way through the excellent *Mostly Adequate Guide to Functional Programming* recently. Although I’ve been working with `compose`

for a bit now, I needed to review why it operates from right-to-left (also known as “right associative”). A review of mathematical theory will help answer this question.

### Function Composition

The image above is read as “g ∘ f”, or “g composed with f”, or “g-compose-f”. For example, (g ∘ f )(c) = #. If we change ‘c’ to ‘x’, this function would read as g(f(x)). As you’ll remember from high school algebra and composite functions, this means you plug in something for ‘x’, then plug that value into ‘f’, then plug that value into ‘g’. This evaluation occurs from right to left, hence why `compose`

is right associative.

To illustrate `compose`

, consider the following:

`f(x) = 2x + 2 and g(x) = –x + 3, find (g o f)(1)`

Solution:

`(g o f)(1) = g(f(1))`

`f(1) = 2(1) + 2 = 4`

`g(4) = -4 + 3 = -1 (remember, 4 was return value of f(1))`

…and -1 is our answer from this function composition.

### Left to Right

Developers don’t always think in right-to-left fashion, so if you want the reverse `pipe`

(or `sequence`

depending on the library), is an alternative to `compose`

that operates from left-to-right.