RE: Functional composition operator?

From: Andrew Kay (
Date: Tue Dec 08 1998 - 19:08:01 MET

Date: Tue, 8 Dec 1998 18:08:01 GMT
From: (Andrew Kay)
Message-Id: <>
Subject: RE: Functional composition operator?

John Whitley raised again a question that I had asked earlier.
We were converting source from caml to ocaml, and needed to
change our infix operator for function compostion.

We found the performance and accuracy of the ocaml compiler (relative
to the caml compiler) to be excellent. There were only two teething
problems in our 1.2MB of source code, once all the syntax changes had
been sorted out with the help of caml2csl, and these were resolved
within a day. (Both were to do with questionable code of our own,
which probably should not have worked in caml, but which somehow
did.) This seems to us to be an amazing achievement of the ocaml
development team, and gives us confidence in using and recommending
ocaml in the future.

From: John Whitley <>
> is there a consensus for choice of infix composition operator?

In the end we settled on >> and << for forward and reverse
composition respectively, satisfying the equations:

    (f << g) x = f (g x) = (g >> f) x

The chevrons give a nice feeling of a data pipeline running from g
to f in each case. Since composition is associative (in the absence
of side effects) we can write (f << g << h << i), which is more elegant
than (compose (compose (compose f g) h) i), without fear of being

We're still interested to know if other people have different approaches.

Best wishes
Andrew Kay

Sharp Labs Europe Ltd, Oxford Science Park, Oxford, UK, OX4 4GB  Tel:+44 1865 747711 FAX:+44 1865 747717

This archive was generated by hypermail 2b29 : Sun Jan 02 2000 - 11:58:17 MET