caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Arlen Christian Mart Cuss <celtic@sairyx.org>
To: yminsky@gmail.com
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] Infix function composition operator
Date: Wed, 10 Nov 2010 15:37:32 +1100	[thread overview]
Message-ID: <1289363852.2282.25.camel@azayaka> (raw)
In-Reply-To: <AANLkTin2Zwrd7Dn_5MLMBqy4X4ui41g8zg18Y5DkGW-r@mail.gmail.com>

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 =
struct
(* ... *)
  let escape =
    let replace = Str.global_replace <<- Str.regexp_string in
    (replace "\"" "&quot;") <<- (replace "'" "&#039;") <<- (replace "&"
"&amp;")

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

Cheers,
Arlen

> On Tue, Nov 9, 2010 at 10:19 PM, Arlen Christian Mart Cuss
> <arlen@noblesamurai.com> 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]
>         http://webcache.googleusercontent.com/search?q=cache:TcqI7o37il8J:pauillac.inria.fr/caml/caml-list/0720.html+ocaml+function+compose&cd=2&hl=en&ct=clnk&client=ubuntu
>         
>         _______________________________________________
>         Caml-list mailing list. Subscription management:
>         http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
>         Archives: http://caml.inria.fr
>         Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
>         Bug reports: http://caml.inria.fr/bin/caml-bugs
> 
> 
> _______________________________________________
> Caml-list mailing list. Subscription management:
> http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
> Archives: http://caml.inria.fr
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs



  reply	other threads:[~2010-11-10  4:37 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-10  3:19 Arlen Christian Mart Cuss
2010-11-10  3:45 ` [Caml-list] " Yaron Minsky
2010-11-10  4:37   ` Arlen Christian Mart Cuss [this message]
2010-11-10 10:06   ` DS
2010-11-10 13:23 ` Michael Ekstrand
2010-11-10  6:59 mark
2010-11-10 12:51 ` Jon Harrop
2010-11-14 18:20   ` Till Varoquaux
2010-11-10 13:44 mark
2010-11-10 14:13 ` Jon Harrop
2010-11-10 16:10   ` Stephan Tolksdorf
2010-11-10 17:41     ` Jon Harrop
2010-11-10 18:52       ` Stephan Tolksdorf
2010-11-10 15:18 mark

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1289363852.2282.25.camel@azayaka \
    --to=celtic@sairyx.org \
    --cc=caml-list@inria.fr \
    --cc=yminsky@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).