Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

Browse thread
[Caml-list] limits on mutual recursion and modules?
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: William Harold Newman <william.newman@a...>
Subject: [Caml-list] limits on mutual recursion and modules?
I'm trying to understand the limits on mutual recursion in ML.

I've seen the hack
  type 'a combination = T1 of int | T2 of 'a | T3 of 'a * 'a
  class virtual test =
      method virtual get: test combination
for mutual recursion between classes and modules in OCaml. That doesn't 
leave me with much confidence that I can figure out whether a particular
kind of mutual recursion is possible.:-|

I've seen various statements about recursion between modules being
impossible, but I'm not sure exactly how severe a limitation this is
in practice, especially given the possibility of hacks like the one

In particular, I'm curious whether it's possible to define
a record type Foo which contains a functor-defined data structure which 
refer to objects of type Foo. E.g., in OCaml is there any way
to define a record type Foo one of whose fields is a Set of Foo?
If so, how? If not,
  * What's the recommended way to represent nontrivial interactions 
    between an object and other objects of the same type?
  * Is it possible to do this in any other strongly typed functional
    languages? And if not,
    ** Why not? Is it known to lead to undecidability or other
       horrendous problems, or is it not considered important, or is
       it an unsolved problem, or...

In general, I'd be interested in any pointers to treatments of this
problem and the theoretical limits involved. (Also the design
decisions involved: Why use "let rec" to combine functions and
"type ... and ..." to combine types and "class ... and ..." to combine
classes and so forth instead of some "rec ... end" or
"struct rec ... end" construct to make everything inside
mutually recursive?) I've spent some time with search engines and
"mutual recursion" and "recursion between modules" and "ml" and
"ocaml" and so forth, but I haven't stumbled on anything that really
nails it.

William Harold Newman <>
"Furious activity is no substitute for understanding." -- H. H. Williams
PGP key fingerprint 85 CE 1C BA 79 8D 51 8C  B9 25 FB EE E0 C3 E5 7C
Bug reports:  FAQ:
To unsubscribe, mail  Archives: