caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-list] coercions from superclass to subclass?
@ 2002-06-06 22:15 Michael Vanier
  2002-06-07 10:17 ` Alessandro Baretta
  2002-06-07 10:47 ` Jacques Garrigue
  0 siblings, 2 replies; 3+ messages in thread
From: Michael Vanier @ 2002-06-06 22:15 UTC (permalink / raw)
  To: caml-list


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?

Mike
-------------------
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


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Caml-list] coercions from superclass to subclass?
  2002-06-06 22:15 [Caml-list] coercions from superclass to subclass? Michael Vanier
@ 2002-06-07 10:17 ` Alessandro Baretta
  2002-06-07 10:47 ` Jacques Garrigue
  1 sibling, 0 replies; 3+ messages in thread
From: Alessandro Baretta @ 2002-06-07 10:17 UTC (permalink / raw)
  To: Michael Vanier; +Cc: Ocaml

Michael Vanier wrote:
> 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?
> 
> Mike

Jacques Garrigue gave the following explanation a week ago.

 > By the way, here is a simple way to do downcasts, when
 > really needed.
 >
 > # let tbl : (< >, impl) Hashtbl.t = Hashtbl.create 17
 >   let register obj = Hashtbl.add tbl (obj :> < >) obj
 >   let recover obj = Hashtbl.find tbl (obj :> < >) ;;
 > val tbl : (<  >, impl) Hashtbl.t = <abstr>
 > val register : impl -> unit = <fun>
 > val recover : < .. > -> impl = <fun>


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


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Caml-list] coercions from superclass to subclass?
  2002-06-06 22:15 [Caml-list] coercions from superclass to subclass? Michael Vanier
  2002-06-07 10:17 ` Alessandro Baretta
@ 2002-06-07 10:47 ` Jacques Garrigue
  1 sibling, 0 replies; 3+ messages in thread
From: Jacques Garrigue @ 2002-06-07 10:47 UTC (permalink / raw)
  To: mvanier; +Cc: caml-list

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


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2002-06-07 10:47 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-06-06 22:15 [Caml-list] coercions from superclass to subclass? Michael Vanier
2002-06-07 10:17 ` Alessandro Baretta
2002-06-07 10:47 ` Jacques Garrigue

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).