Version française
Home     About     Download     Resources     Contact us    
Browse thread
The universal variable 'a would escape its scope
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Christophe TROESTLER <Christophe.Troestler@u...>
Subject: The universal variable 'a would escape its scope
Hi,

I got a variant of the error
http://caml.inria.fr/archives/200207/msg00110.html and I do not
understand it.  Here is a small example showing it:

  # type 'a t = < output : (string -> unit) -> unit; .. > as 'a;;
  type 'a t = 'a constraint 'a = < output : (string -> unit) -> unit; .. >
  
  # class a = object
    method f : 'a. 'a t -> unit = fun o -> o#output print_string
  end;;
    method f : 'a. 'a t -> unit = fun o -> o#output print_string
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  This expression has type < output : (string -> unit) -> unit; .. >
  but is here used with type < output : (string -> unit) -> unit; .. >
  The universal variable 'a would escape its scope

If I do something with ['a list] instead of ['a t] (or if ['a t] is
abstract), I got no problem.  If [f] is a function instead of a
method, it works.  (I do _not_ want to have to coerce the object
passed to [f].)

Is there something one can do about this?

Cheers,
ChriS