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
[Caml-list] Understanding why Ocaml doesn't support operator overloading.
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2002-12-01 (23:42)
From: William Lovas <wlovas@s...>
Subject: Re: [Caml-list] Understanding why Ocaml doesn't support operator overloading.
On Sun, Dec 01, 2002 at 06:30:55PM +0100, Pierre Weis wrote:
> >  As an exercise, try to write a useful function that operates
> > on just 'a's -- you'll find it a challenge :)  (in fact, i think there's a
> > theorem in one of Philip Wadler's papers that says the *only* function of
> > type 'a -> 'a in a purely functional language is the identity function).
> This is a theorem that was stated about $\lambda$-calculus long time
> ago, way before Phil Wadler's papers, back to Reynolds as I remember.

That's probably true -- i just happened to remember it from a Wadler paper.

> The challenge you proposed is not so difficult in Caml. You can easily
> define functions that operates on justs'a's, or even just return plain
> 'a's!
>         Objective Caml version 3.06+18 (2002-11-07)
> # raise;;
> - : exn -> 'a = <fun>
> # ignore;;
> - : 'a -> unit = <fun>

Mmm, this certainly is a useful use of polymorphism without parametrized,
types, but the challenge i was trying to propose was more to the spirit of
the original 'a -> 'a theorem: by "useful function that operates on just
'a's", what i meant was essentially "a non-trivial function of type
'a -> 'a", which is (i hope) a significantly more difficult challenge :)

Polymorphism as used in `raise' and `ignore' strikes me as more language
magic than anything else -- although useful in practice, i have a strong
intuition that from a certain theoretical perspective, namely that of
purely functional languages, they're not so interesting.  So, to clarify,
while they are practical uses of polymorphism, they're not what i had in
mind when i wrote the above paragraph.

Thanks for the corrections and pointers!

To unsubscribe, mail Archives:
Bug reports: FAQ:
Beginner's list: