Browse thread
Infix function composition operator
-
Arlen Christian Mart Cuss
-
Yaron Minsky
- Arlen Christian Mart Cuss
- DS
- Michael Ekstrand
-
Yaron Minsky
[
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: | -- (:) |
| 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 =
struct
(* ... *)
let escape =
let replace = Str.global_replace <<- Str.regexp_string in
(replace "\"" """) <<- (replace "'" "'") <<- (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 "\"" """ (replace "'" "'" (replace "&" "&" 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