From: "Nicolas Cannasse" <warplayer@free.fr>
To: "Xavier Leroy" <xavier.leroy@inria.fr>,
"Jørgen Hermanrud Fjeld" <jhf@hex.no>
Cc: "ocaml" <caml-list@inria.fr>
Subject: Re: [Caml-list] Understanding why Ocaml doesn't support operator overloading.
Date: Fri, 29 Nov 2002 16:52:03 -0000 [thread overview]
Message-ID: <001c01c297bf$436b7a20$4600a8c0@warp> (raw)
In-Reply-To: <20021129162608.B27468@pauillac.inria.fr>
> > Some time ago, when looking at Ocaml for the first time, I got
> > baffled by the lack of operator overloading. I am still wondering
> > why this is the case. Could someone please point me to more
> > information about this?
> > I remember reading something about operator overloading and type
inference
> > beeing hard to combine.
>
> I don't know how technical you'd like the answer to be, so let me
> start with a simple explanation that doesn't get into all technical
> details.
>
> The problem is indeed the combination of overloading and type
> inference. The catch-22 is this:
> - overloading determines the meaning of an operator from the types of
> its arguments (e.g. to determine whether + is integer addition or
> floating-point addition);
> - type inference relies (among other things) on the fact that each
> operator has a unique type to determine the types of its arguments
> (e.g. if one of the arguments is a function parameter).
>
> If you don't see the circularity, consider
>
> let f x = x + x
>
> If "+" is overloaded on integers and on floats, you get two possible
> types for f: int -> int or float -> float. None of these types is
> better than the other; if the compiler commits to one of them, say
> int->int, later applications of f (e.g. to a float) can be rejected.
I have already seen this sample in my early caml days and there is still
something I don't get.
Of course the ML type system relies on type inference and need do choose the
"best available" type but what if we enrich the type system with an "OR"
operator ? Then if (+) is overloaded on floats, you'll get :
f : int -> int OR float -> float
or something like a type constraint : f : 'a -> 'a where 'a in [int;float]
This approach seems trivial to me, but I really can understand that this
require a lot of addins in the typing algorithms & theory. BTW, does one of
the upper approach has already been discussed ? any paper on it ? any
countersample that will make me feel stupid ? :)
Regards,
Nicolas Cannasse
-------------------
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
next prev parent reply other threads:[~2002-11-29 15:49 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-11-28 21:02 Jørgen Hermanrud Fjeld
2002-11-28 21:27 ` Jørgen Hermanrud Fjeld
2002-11-29 15:26 ` Xavier Leroy
2002-11-29 15:42 ` Christophe Raffalli
2002-11-29 16:52 ` Nicolas Cannasse [this message]
2002-11-29 17:26 ` Michal Moskal
2002-11-30 0:00 ` Mike Lin
2002-11-30 10:24 ` Michal Moskal
2002-11-30 23:06 ` Mike Lin
2002-11-30 21:41 ` William Lovas
2002-12-01 17:30 ` Pierre Weis
2002-12-01 23:41 ` William Lovas
2002-12-02 9:52 ` Remi VANICAT
2002-11-30 21:47 ` Pierre Weis
2002-12-01 7:40 ` Christophe Raffalli
2002-11-30 21:36 ` Pierre Weis
2002-11-30 21:33 ` Pierre Weis
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='001c01c297bf$436b7a20$4600a8c0@warp' \
--to=warplayer@free.fr \
--cc=caml-list@inria.fr \
--cc=jhf@hex.no \
--cc=xavier.leroy@inria.fr \
/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