Browse thread
[Caml-list] polymorphic methods
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | Damien <Damien.Pous@e...> |
| Subject: | Re: [Caml-list] polymorphic methods |
On Thu, 13 Mar 2003 18:27:02 +0900 Jacques Garrigue <garrigue@kurims.kyoto-u.ac.jp> wrote: > > but that's not really a beautiful piece of code ! > And I would not have expected it to be! > This was just a theoretical answer. :-) > If you are bothered by coercions, you may have a look at the trick in > lablgtk, which avoids polymorphic methods: give the parent as > argument. > let new_node ?parent () = > let n = new node in > begin match parent with None -> () > | Some (p : #a_t) -> p#add (n :> a_t) > end; > n > You can also do the trick in an initializer. That's what I planned to do, but my trees are 'dynamic', i.e. I need to move nodes across the tree, so an initializer is not sufficient ... -> I'll use some helper function, or the tricks that have been proposed > Alternatively, you might just have an interface of a_t without > the method m. This way you have no problem with recursion: > > class type a0_t = object > ... everything but add ... > end > class type a_t = object > inherit a0_t > method add : #a0_t -> unit > end But then, when I retrieve a child from its parent, it has no more add capability :-( > > I don't know what do you mean when saying > > "such a type cannot be defined", in fact, I could define this > > equivalent (I think it is...) : > > > > >#class type a_t = object > > > method m: 'a.(<m: 'a -> unit; ..> as 'a) -> unit > > >end > > This is not equivalent: the m in a_t is a polymorphic method, but not > the one in the recursion. Polymorphic and monomorphic methods are > incompatible, so you cannot pass an a_t to m. thanks for the explanation ! Now, questions : Would it be useful to accept such a type (not just for my trees) ? Would it be correct (semantically) ? You told about "a way to recurse on a quantified polymorphic method rather than on the whole object." (that does not exists), Would it be useful (and correct) ? Has someone studied this ? damien ------------------- 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