[
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: | -- (:) |
| 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-----