[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: | 1998-12-08 (18:28) |
From: | Pierre Weis <Pierre.Weis@i...> |
Subject: | Re: Functional composition operator? |
> Andrew Kay <akay@sharp.co.uk> wrote, in the caml-list archives: > > We are in the process of converting our Caml code into OCaml, and > > have a problem choosing an infix syntax for function composition > > [...] What do other OCaml people use for function composition? Is > > there standard emerging? > > I found no answer in the archives, so I'd like to raise the same > question again: is there a consensus for choice of infix composition > operator? Failing that, is there some design principle that warranted > its omission? > > Thanks, > John Whitley The normal infix operator should be a o, or more precisely a $\circ$ symbol. Unfortunately if we add o in the syntax of Caml, this will be a bit strange to have this identifier as an infix operation (moreover this implies difficult to explain syntax errors in programs). In fact we discourage the usage of functional composition as a general programming tool, since: -- it only save a few characters in programs (Compare let h = f o g with let h x = f (g x);;) -- it breaks the polymorphism (if defined as let h = f o g h is not generalized, since its definition is a function application, whereas inline expansion of functional composition let h x = f (g x) being the definition of a function is properly generalized.) -- it is not so clear, especially in case of composition of curried functions (Consider let f x y z = x + y + z then the compositions f o (f 2 3) or (f 1) o (f 2 3)) It is still possible to define a composition operator to use in trivial cases. So you may choose any multi-character infix operator such as ++, if you really need functional composition. Best regards, Pierre Weis INRIA, Projet Cristal, Pierre.Weis@inria.fr, http://cristal.inria.fr/~weis/