English version
Accueil     À propos     Téléchargement     Ressources     Contactez-nous    

Ce site est rarement mis à jour. Pour les informations les plus récentes, rendez-vous sur le nouveau site OCaml à l'adresse ocaml.org.

Browse thread
[Caml-list] polymorphic methods
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2003-03-13 (14:52)
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 ?


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