Re: Using modules and classes recursively

From: Xavier Leroy (
Date: Tue Jan 12 1999 - 18:29:19 MET

Date: Tue, 12 Jan 1999 18:29:19 +0100
From: Xavier Leroy <>
To: Markus Mottl <>, OCAML <>
Subject: Re: Using modules and classes recursively
In-Reply-To: <>; from Markus Mottl on Sat, Jan 09, 1999 at 09:24:39PM +0100

> Is it impossible to have modules and classes combined recursively?

Currently, yes. A module definition cannot be mutually recursive with
any other definition (type, class, or another module). This raises a
number of difficult typechecking and compilation problems that are
still largely open. I agree this is probably the most irritating
restriction of ML modules.

> If yes, what would be a good workaround?

I'm afraid you just have to define your own "set" type, without using
the Set.Make functor. E.g.

        type 'a myset = Empty | Node of myset * 'a * myset

        (* an efficient implementation of myset can easily be
           lifted from the sources of the "Set" standard library
           module *)

        class foo =
            method bar = (... : foo myset)

This isn't very satisfactory, but I'm afraid we can't do better until
recursive modules are better understood.


- Xavier Leroy

This archive was generated by hypermail 2b29 : Sun Jan 02 2000 - 11:58:17 MET