caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Jacques Garrigue <garrigue@kurims.kyoto-u.ac.jp>
To: mvanier@cs.caltech.edu
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] coercions from superclass to subclass?
Date: Fri, 07 Jun 2002 19:47:26 +0900	[thread overview]
Message-ID: <20020607194726N.garrigue@kurims.kyoto-u.ac.jp> (raw)
In-Reply-To: <200206062215.g56MF5w19818@orchestra.cs.caltech.edu>

From: Michael Vanier <mvanier@cs.caltech.edu>

> I understand that there is no mechanism to coerce from a superclass to a
> subclass in ocaml (i.e. the equivalent of C++'s run-time type
> identification or java's instanceof operator).  Are there any plans to add
> such a capability in the future?

The workaround was already posted. Look out Remi Vanicat's message
for a space-safe implementation.
Note that you need a coercion if you want to do it in an initializer
  class c () = object (self)
    initializer register (self :> c)
    method m = 1
  end
However this does not work with ocaml 3.04. You must write
   (self : < m : _ ; .. > :> c)
enumerating all the methods.
(self :> c) will work in ocaml 3.05.

You can also choose to write a wrapper to the constructor
  let new_c () = let o = new c () in register o; o
but this won't register automatically all subclasses.

The moral reason for the absence of downcasts is not that this is
unacceptable to use downcasts (yet, better to avoid it).  The problem
is that subtyping in ocaml is not by name, but by structure. Checking
subtyping would require a complex run-time type (not available
currently), and would be costly.  Moreover, you may produce objects
whose type is not fully known, making it even worse.

Jacques Garrigue
-------------------
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


      parent reply	other threads:[~2002-06-07 10:47 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-06-06 22:15 Michael Vanier
2002-06-07 10:17 ` Alessandro Baretta
2002-06-07 10:47 ` Jacques Garrigue [this message]

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=20020607194726N.garrigue@kurims.kyoto-u.ac.jp \
    --to=garrigue@kurims.kyoto-u.ac.jp \
    --cc=caml-list@inria.fr \
    --cc=mvanier@cs.caltech.edu \
    /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).