Re: Using modules and classes recursively

From: Xavier Leroy (Xavier.Leroy@inria.fr)
Date: Tue Jan 12 1999 - 18:29:19 MET


Date: Tue, 12 Jan 1999 18:29:19 +0100
From: Xavier Leroy <Xavier.Leroy@inria.fr>
To: Markus Mottl <mottl@miss.wu-wien.ac.at>, OCAML <caml-list@inria.fr>
Subject: Re: Using modules and classes recursively
In-Reply-To: <199901092024.VAA15046@miss.wu-wien.ac.at>; 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 =
          object
            method bar = (... : foo myset)
            ...
          end

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

Regards,

- Xavier Leroy



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