Jacques Garrigue a écrit :
There are already polymorphic methods in ocaml.
The syntax for your example would be:

class myobject = object
  method id : 'a. 'a -> 'a = fun x -> x
end

Yes, I know that there are already polymorphic methods in ocaml.

A "polymorphic" keyword might seem simpler, but it would be complex to
handle the case where a polymorphic method type contains also class
parameters:

class ['a] cell (x : 'a) = object
  method pair : 'b. 'b -> 'a * 'b = fun y -> (x,y)
end

Indeed. But you could also write:

class ['a] cell (x: 'a) = object
  polymorphic method pair y = (x, y)
end

The polymorphic keyword would only bind what can be bind. Since x is already of type 'a, it would escape the scope of the 'polymorphic' keyword. But y would not escape the scope of the polymorphic keyword.

More generally, you might end up with types more polymorphic than you
expected, and since differently instantiated polymorphic method types
are incompatible, this would be a problem.

Well, for now, when I write methods, my methods tend to be not polymorphic enough. One could keep the default behaviour without the keyword, and also use the keyword polymorphic to bind only what can be bound (i.e. not 'x' in your example).

The problem I am facing now is cumbersome: writing types for methods arguments everywhere... That's not what people would expect for type inference, unfortunately. The 'polymorphic' keyword would only be a hint as to how type inference would be done. This way I wouldn't have to keep the typing of the method arguments in sync with the code of the method (or at least, much less).

By the way, I do not exactly understand the "you might end up with types more polymorphic than you expected" part.

Jacques Garrigue

--
     Guillaume Yziquel
http://yziquel.homelinux.org/

_______________________________________________
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

Reply via email to