Version française
Home     About     Download     Resources     Contact us    
Browse thread
"OCaml gives you only monomorphic methods in classes."
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: brogoff <brogoff@s...>
Subject: Re: [Caml-list] "OCaml gives you only monomorphic methods in classes."
On Tue, 8 Jan 2008, Jon Harrop wrote:
> On Tuesday 08 January 2008 02:30:31 Jacques Garrigue wrote:
> > From: Jon Harrop <jon@ffconsultancy.com>
> > > In what way must methods be monomorphic in OCaml classes?
> >
> > They don't. With the restriction that the types of polymorphic
> > methods cannot be inferred. There is also another subtle
> > limitation, that object are only allowed to have regular
> > types. As a result, one cannot write a polymorphic map method in
> > ocaml, but this is possible in Java 2 or Scala.
>
> This begs a question for me: have people used this functionality in their
> OCaml code?

I don't understand your question. How could we use this functionality in
our OCaml code if it doesn't exist? You must mean something else,
perhaps "do I use polymorphic methods in my OCaml code?". Not now. I
did when translating some purely functional data structures from
Okasaki's book to OCaml, then rewrote them using the higher
order polymorphism of record fields, which we got at the same time, a
workaround to the lack of polymorphic recursion in OCaml.

> I personally make virtually no use of OCaml's OOP capabilities at all but I

Very punny ;-)

> make a lot of use of polymorphic variants. In all but a few cases, objects
> seem to be very rarely used by other people in OCaml code. The only notable
> exceptions I can think of are LablGTK2 and PXP.

I use them when I have record field name clashes and I decide that this
aspect of OCaml records hinders rather than helps readability. It is an
interesting topic, certainly. Pattern matching is less useful on records
than variants (IMO of course) so the fact that we don't have it on
objects doesn't bother me all that much. But in my experience I need to
provide a lot more explicit typing when using the OOP features than I'm
used to, in order to get comprehensible error messages.

> > I'm quite sure that Martin Odersky is aware of this. I would rather
> > interpret his quote as meaning that you have to extend HM in a
> > non-trivial way to allow this.

If the original quote was accurate, then I think this is quite generous,
as it seemed the statement was 'OCaml doesn't have polymorphic methods,
period-end-of-story".

Scala does look very interesting though, and if I need to work in a JVM
environment I'll seriously consider using it.

-- Brian