caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: padiolea@irisa.fr
To: "Brian Hurt" <bhurt@spnz.org>
Cc: wiedergaenger@fastmail.fm, caml-list@inria.fr
Subject: Re: [Caml-list] generic functions
Date: Sun, 9 Jan 2005 19:45:12 +0100 (CET)	[thread overview]
Message-ID: <1082.80.8.1.98.1105296312.squirrel@80.8.1.98> (raw)
In-Reply-To: <Pine.LNX.4.44.0501090907240.5563-100000@localhost.localdomain>

> On Sun, 9 Jan 2005 wiedergaenger@fastmail.fm wrote:
>
>> I just got from LISP to OCaml, and wondered if there is an equivalent of
>> generic functions from LISP (CLOS) in OCaml. In the Common Lisp Object
>> System methods don't belong to certain objects/classes. They are just
>> function specializing on the argument types. So basically I want to
>> write something like:
>>
>> let foo (x : int) = x*x;;
>> let foo (x : float) = x*.x;;
>>
>> This, obviously, will not work since foo is just redefined by the second
>> statement. One would think, that having methods not being belonging to
>> objects/classes, is rather pointless. Well 95% of the time, there is no
>> necessity for that. But in the other 5%, it is really helpful.
>>
>
...

> 1) Just use different functions.  Do:
...

> 2) Use variant types:
...

> 3) Use modules:
...

I would add 4)  use objects.
see http://caml.inria.fr/ocaml/htmlman/manual005.html
and define a class ofloat, and oint (for object float and objects int)
and define
  let foo x = x#mul x
Note that foo does not have to belong to the classes. It can be defined
outside of the class defintion.
Of course if your definition of foo would have been
 let foo (x : int) = x+x;; (* * have been replaced by + *)
 let foo (x : float) = x*.x;;
then, it does not work anymore.



>
> With the exception of certain artificial contests (Paul Graham) I've never
> met a real world problem that needed overloading, or even benefitted
> signifigantly from overloading that didn't benefit just as much or more
> from one of the solutions above.

I guess that's because you never been involved in real world problems.
Overloading, which is adhoc polymorphism is as useful as
parametric polymorphism. Ask the haskell folks if they would accept
to forget about type classes.
Of course functors can emulate some of the advantages of overloading,
but not totally. Objects are better for this.

>
> Brian
>
>
> _______________________________________________
> 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
>



  parent reply	other threads:[~2005-01-09 18:45 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-01-09 13:19 wiedergaenger
2005-01-09 14:56 ` [Caml-list] " Richard Jones
2005-01-09 15:48 ` Brian Hurt
2005-01-09 17:17   ` David McClain
2005-01-09 18:09     ` brogoff
2005-01-09 18:45   ` padiolea [this message]
2005-01-10  0:23   ` skaller
2005-01-11 12:14     ` Daniel Yokomizo
2005-01-10  9:55   ` [Caml-list] " Alex Baretta
2005-01-10 10:47     ` Olivier Andrieu
2005-01-10 12:16       ` Alex Baretta
2005-01-12 23:49     ` Aleksey Nogin

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=1082.80.8.1.98.1105296312.squirrel@80.8.1.98 \
    --to=padiolea@irisa.fr \
    --cc=bhurt@spnz.org \
    --cc=caml-list@inria.fr \
    --cc=wiedergaenger@fastmail.fm \
    /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).