Version française
Home     About     Download     Resources     Contact us    
Browse thread
class constraints
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Peng Zang <peng.zang@g...>
Subject: Re: [Caml-list] class constraints
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Perhaps you mean this?

  class type foo = object('self)
    method get_parent : 'self
  end

  class type foo2 = object('self)
    constraint foo2 = #foo
    method baz : float
    method get_parent : 'self
  end


The error you get is because the first get_parent returns a foo, while the 
second returns a foo2.  While you can write a function that takes "foo or 
foo2" or really anything that is "foo-able", but you can't write a function 
that returns "foo or foo2".  When it comes to return types you have to choose 
what to return.  At least.. that's how I understand it.

Peng


On Friday 27 March 2009 10:06:03 am Jacques Le Normand wrote:
> Dear list,
> I'm having a little problem understanding constraints in objects. Consider
> the following code:
>
> class type foo =
> object
>   method get_parent : foo
> end
>
> class type foo2 =
> object
>   constraint foo2 = #foo
>   method baz : float
>   method get_parent : foo2
> end
>
> it gives me the following error:
>
> The abbreviation foo2 expands to type < baz : float; get_parent : foo2 >
> but is used with type #foo
>
> but foo2 is clearly a subtype of foo. What am I doing wrong? I'm using
> ocaml 3.10.2
> --Jacques Le Normand
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.7 (GNU/Linux)

iD8DBQFJzOEhfIRcEFL/JewRAknhAJ46Gn8jv6azaR0aVJZtZo/GENIlOACfUOA4
lcS+swOu0JQ4ewvtvjKAFkQ=
=nt3C
-----END PGP SIGNATURE-----