Browse thread
recursive types
[
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: | Remi Vanicat <vanicat@d...> |
| Subject: | Re: recursive types |
"Jacques Le Normand" <rathereasy@gmail.com> writes: > hello again list > is it possible to have mutually recursive classes and types? I'm trying to > implement the zipper, and this is what I came up with: Not directly, but you can use polymorphism to have it: class type ['a] node_wrapper = object method identify : string method get_child_location : 'a end class virtual ['a] nodeable = object(self) method virtual to_node_wrapper : 'a node_wrapper end type path = (location nodeable list * location * location nodeable list) option and location = Loc of location nodeable * path you could even do something like : class type ['a] pre_node_wrapper = object method identify : string method get_child_location : 'a end class virtual ['a] pre_nodeable = object(self) method virtual to_node_wrapper : 'a pre_node_wrapper end type path = (location pre_nodeable list * location * location pre_nodeable list) option and location = Loc of location pre_nodeable * path class type node_wrapper = [location] pre_node_wrapper class virtual nodeable = [location] pre_nodeable (you could also make the type polymorphic, and the class monomorphic if you declare the type before the class and class type). You probably should come on the Beginner's list, where such question could be answered (see http://groups.yahoo.com/group/ocaml_beginners) -- Rémi Vanicat