Function Composition

Jed Wesley-Smith jed at
Tue Jan 1 16:17:02 PST 2013

Well, I'm not arguing the merits of one or the other, indeed I'd like
both (and I usually use the andThen/; form). I'd just argue that this
is a well established name/form and there is value (as in least
surprise) in following the precedent.

Function<A, B> f = …
Function<B, C> g = …

Function<A, C> c = g.compose(f);
Function<A, C> d = f.andThen(g);

I'd argue the second form reads better anyway!


On 2 January 2013 11:07, John Nilsson <john at> wrote:
> For what it's worth. I think the math people got it wrong with "∘". The
> other operation they call compose: ";" - which has applicative order - feels
> more natural. So one vote for keeping compose as ";". Also, this is the
> composition operation for statements Java programmers have been using for
> years with no complaint, so why arbitrarily switch to "∘" for function
> composition?
> Besides even the math people revert to applicative order when modelling
> function composition as a category.
> BR,
> John
> On Wed, Jan 2, 2013 at 12:40 AM, Jed Wesley-Smith <jed at>
> wrote:
>> hello lambdarians!
>> Just noticed that the java.util.function.Function.compose method is
>> round the wrong way (according to the common definition of function
>> composition*).
>> The current lambda definition:
>> has f.compose(g) mean apply f and then apply g, whereas the usual
>> (most other languages and the literature) has f ∘ g mean apply g and
>> then apply f.
>> The form that Function has currently is commonly known as andThen. So,
>> you could rename the current method andThen and add a new compose
>> method that works in the usual manner.
>> cheers,
>> jed.
>> * references:

More information about the lambda-dev mailing list