[
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: | 2005-09-19 (12:20) |
From: | Jacques Garrigue <garrigue@m...> |
Subject: | Re: [Caml-list] object type error |
From: Michael Wohlwend <micha-1@fantasymail.de> > ( type xxx is a class type and the other class implements this interface) > > ----------------------Error: > This expression has type > < (* many methods *); .. > > but is here used with type xxx > Self type cannot be unified with a closed object type > --------------------- > I try to get rid of them by adding random type declarations which I mostly > don't understand :-), but that's not the solution. > > What is the reason for that message? It means that type inference results in unifying the type of self (either from a named self, a {< .. >} expression, or a type annotation) to an explicit object type. To allow classes to be extended, the type of self must be left polymorphic. You can sometimes avoid it by using a coercion (self :> xxx), but this doesn't work if xxx was not defined in advance, of if it contains contravariant occurences. I stop here: you already realize this is a rather hairy problem. Since there can be many causes, I need to see your code to understand where the problem comes from. Another solution if you don't need to inherit from the object you are defining, is to use an immediate object, as it is allowed to have a closed type; at least you won't get the above message. Jacques Garrigue