Browse thread
Problem with recursive class and non-class types
-
Goswin von Brederlow
- Jacques Garrigue
[
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: | 2010-05-20 (07:39) |
From: | Jacques Garrigue <garrigue@m...> |
Subject: | Re: [Caml-list] Problem with recursive class and non-class types |
From: Goswin von Brederlow <goswin-v-b@web.de> > I want to define the two types below: > > type foo = { bar : bar; } > class bar = object val mutable foo : foo list = [] end > > Is there another way of doing this other than: > > # type 'a foo = { bar : 'a; } > class bar = object val mutable foo : #bar foo list = [] end;; > type 'a foo = { bar : 'a; } > class bar : object val mutable foo : #bar foo list end The alternative is to use a recursive module, but this is actually more verbose. module rec M : sig type foo = { bar : M.bar; } class bar : object val mutable foo : foo list end end = struct type foo = { bar : M.bar; } class bar = object val mutable foo : foo list = [] end end You can avoid a bit of the verboseness by splitting types and values, since recursive modules built only from types require no duplication. module rec M : sig type foo = { bar : M.bar; } class type bar = object val mutable foo : foo list end end = M class bar : M.bar = object val mutable foo : M.foo list = [] end You still need to provide an explicit interface for bar. Hope this helps, Jacques Garrigue