Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

Browse thread
Infix function composition operator
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2010-11-10 (04:37)
From: Arlen Christian Mart Cuss <celtic@s...>
Subject: Re: [Caml-list] Infix function composition operator
Hi Yaron,

On Tue, 2010-11-09 at 22:45 -0500, Yaron Minsky wrote:
> This is probably a minority opinion, but I have written and read quite
> a lot of OCaml code over the years, and I've seen surprisingly few
> effective uses of the composition operator.  Somehow, I usually find
> that code that avoids it is simpler and easier to read.

I know what you mean - it can make some code more obtuse than just doing
the same thing with a lambda. But I can't help but get the feeling it
has a place here: (note: example is semi-contrived and there are plenty
of better ways to do this, but just as an example)

module CGI =
(* ... *)
  let escape =
    let replace = Str.global_replace <<- Str.regexp_string in
    (replace "\"" "&quot;") <<- (replace "'" "&#039;") <<- (replace "&"

Particularly the second line of `escape', where the escaping mechanism
is indeed a composition of the three replaces as specified.

Comparing that to this:

let escape s = 
  let replace = (* ... *) in
  replace "\"" "&quot;" (replace "'" "&#039;" (replace "&" "&amp;" s))

.. I prefer the former, as the latter forces me to specify an argument,
and nest the calls to replace. I'm not sure if there are any performance
benefits/losses as a result of computing the function `escape' in the
first example, either, but it's a consideration.

> I'm not averse to infix operators.  At Jane Street we've found the
> following sequencing operator to be highly useful:
> let ( |! ) x f = f x
> and it is indeed part of the default include in Jane Street's Core
> library.

That looks neat, and I imagine it to be useful, but I can't think of a
concrete use-case off the cuff. Could you give an example?

> y


> On Tue, Nov 9, 2010 at 10:19 PM, Arlen Christian Mart Cuss
> <> wrote:
>         Hi all,
>         I know this was asked at least 12 years ago[1], but is there
>         any
>         consensus or reason for there not being a "compose" function
>         in standard
>         OCaml, nor an infix operator?
>         At the moment I tend to "let compose" or "let (<<-) f g x = f
>         (g x)",
>         but I wish I didn't have to!
>         Thanks,
>         Arlen
>         [1]
>         _______________________________________________
>         Caml-list mailing list. Subscription management:
>         Archives:
>         Beginner's list:
>         Bug reports:
> _______________________________________________
> Caml-list mailing list. Subscription management:
> Archives:
> Beginner's list:
> Bug reports: