[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
 Date: -- (:) From: William Lovas 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!

cheers,
William
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners