* [Caml-list] Polymorphic method problem
@ 2004-07-06 18:23 Christian Szegedy
2004-07-06 21:38 ` Alex Baretta
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Christian Szegedy @ 2004-07-06 18:23 UTC (permalink / raw)
To: caml-list
Can anyone tell me, why does the following piece of
code fail to compile, and how can I achieve
equivalent effect in the most convenient way?
class a () =
object(self)
method f : 'a. ((< f : unit; .. > as 'a) -> unit) = fun other ->
other#f
method g = (self :> a)
end
Thanks in advance!
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Caml-list] Polymorphic method problem
2004-07-06 18:23 [Caml-list] Polymorphic method problem Christian Szegedy
@ 2004-07-06 21:38 ` Alex Baretta
2004-07-06 22:00 ` Christian Szegedy
2004-07-06 23:44 ` Olivier Andrieu
2004-07-07 1:53 ` Jacques GARRIGUE
2 siblings, 1 reply; 8+ messages in thread
From: Alex Baretta @ 2004-07-06 21:38 UTC (permalink / raw)
To: Christian Szegedy; +Cc: caml-list
Christian Szegedy wrote:
> Can anyone tell me, why does the following piece of
> code fail to compile, and how can I achieve
> equivalent effect in the most convenient way?
>
> class a () =
> object(self)
> method f : 'a. ((< f : unit; .. > as 'a) -> unit) = fun other ->
> other#f method g = (self :> a)
> end
>
> Thanks in advance!
>
Your type annotations are not correct. Omit the ones which are not
strictly needed.
class a =
object (self)
method f : 'a.((<f:unit; ..> as 'a) -> unit) > as 'a) -> unit) =
fun x -> x # f
method g = self
end
Alex
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Caml-list] Polymorphic method problem
2004-07-06 18:23 [Caml-list] Polymorphic method problem Christian Szegedy
2004-07-06 21:38 ` Alex Baretta
@ 2004-07-06 23:44 ` Olivier Andrieu
2004-07-07 1:53 ` Jacques GARRIGUE
2 siblings, 0 replies; 8+ messages in thread
From: Olivier Andrieu @ 2004-07-06 23:44 UTC (permalink / raw)
To: szegedy; +Cc: caml-list
Christian Szegedy [Tue, 06 Jul 2004]:
> Can anyone tell me, why does the following piece of
> code fail to compile, and how can I achieve
> equivalent effect in the most convenient way?
>
> class a () =
> object(self)
> method f : 'a. ((< f : unit; .. > as 'a) -> unit) = fun other ->
> other#f
> method g = (self :> a)
> end
Defining a class type beforehand helps:
,----
| # class type a_t = object method f : < f : unit; ..> -> unit method g : a_t end ;;
| class type a_t =
| object method f : < f : unit; .. > -> unit method g : a_t end
|
| # class a () : a_t = object (self)
| method f : 'a. ((< f : unit; .. > as 'a) -> unit) = fun other ->
| other#f
| method g = (self :> a_t)
| end ;;
| class a : unit -> a_t
`----
--
Olivier
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Caml-list] Polymorphic method problem
2004-07-06 18:23 [Caml-list] Polymorphic method problem Christian Szegedy
2004-07-06 21:38 ` Alex Baretta
2004-07-06 23:44 ` Olivier Andrieu
@ 2004-07-07 1:53 ` Jacques GARRIGUE
2004-07-08 22:51 ` Christian Szegedy
2 siblings, 1 reply; 8+ messages in thread
From: Jacques GARRIGUE @ 2004-07-07 1:53 UTC (permalink / raw)
To: szegedy; +Cc: caml-list
From: szegedy@t-online.de (Christian Szegedy)
> Can anyone tell me, why does the following piece of
> code fail to compile, and how can I achieve
> equivalent effect in the most convenient way?
>
> class a () =
> object(self)
> method f : 'a. ((< f : unit; .. > as 'a) -> unit) = fun other ->
> other#f
> method g = (self :> a)
> end
There was a bug in the subtyping algorithm.
Hopefully, it's now fixed in CVS.
A workaround at the source level is to define your type in advance:
class type ta = object
method f : <f : unit; ..> -> unit
method g : ta
end
class a () =
object(self : #ta)
method f other = other#f
method g = (self :> ta)
end
Jacques Garrigue
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2004-07-08 22:52 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-07-06 18:23 [Caml-list] Polymorphic method problem Christian Szegedy
2004-07-06 21:38 ` Alex Baretta
2004-07-06 22:00 ` Christian Szegedy
2004-07-06 23:16 ` William Lovas
2004-07-06 23:53 ` Alex Baretta
2004-07-06 23:44 ` Olivier Andrieu
2004-07-07 1:53 ` Jacques GARRIGUE
2004-07-08 22:51 ` Christian Szegedy
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox