Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

Browse thread
object type error
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ 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 <>

> ( 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