From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id QAA00398; Mon, 18 Aug 2003 16:53:22 +0200 (MET DST) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id QAA14570 for ; Mon, 18 Aug 2003 16:53:21 +0200 (MET DST) Received: from smtp6.mindspring.com (smtp6.mindspring.com [207.69.200.110]) by nez-perce.inria.fr (8.11.1/8.11.1) with ESMTP id h7IErKT15406 for ; Mon, 18 Aug 2003 16:53:20 +0200 (MET DST) Received: from user-0ccekej.cable.mindspring.com ([24.199.81.211] helo=minsky-primus.homeip.net) by smtp6.mindspring.com with smtp (Exim 3.33 #1) id 19olNn-00077K-00 for caml-list@inria.fr; Mon, 18 Aug 2003 10:53:19 -0400 Received: from 141.155.88.179 (SquirrelMail authenticated user yminsky) by minsky-primus.homeip.net with HTTP; Mon, 18 Aug 2003 10:53:19 -0400 (EDT) Message-ID: <23214.141.155.88.179.1061218399.squirrel@minsky-primus.homeip.net> Date: Mon, 18 Aug 2003 10:53:19 -0400 (EDT) Subject: Re: [Caml-list] Parameterizing multiple modules using functors From: "Yaron Minsky" To: In-Reply-To: <21795.141.155.88.179.1061217600.squirrel@minsky-primus.homeip.net> References: <21795.141.155.88.179.1061217600.squirrel@minsky-primus.homeip.net> X-Priority: 3 Importance: Normal X-Mailer: SquirrelMail (version 1.2.11) MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Loop: caml-list@inria.fr X-Spam: no; 0.00; yaron:01 minsky:01 yminsky:01 cornell:01 caml-list:01 functors:01 blume:01 .10:99 ifi:01 prev:01 selm:01 3.07:01 functor:01 struct:01 genericity:01 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk For what it's worth, last time I brought this up, it was mentioned that some solutions have been proposed to this problem in the Standard ML world: http://cm.bell-labs.com/cm/cs/who/blume/pub.html Also, here's a link to the previous discussion on google groups. http://www.google.com/groups?hl=en&lr=&ie=UTF-8&oe=UTF-8&threadm=fa.ianr5dv.10n67hi%40ifi.uio.no&rnum=40&prev=/groups%3Fq%3Dgroup:fa.caml%2Bauthor:yminsky%2540cs.cornell.edu%26start%3D30%26hl%3Den%26lr%3D%26ie%3DUTF-8%26oe%3DUTF-8%26selm%3Dfa.ianr5dv.10n67hi%2540ifi.uio.no%26rnum%3D40 y > I've asked this question before, but never quite got a satisfactory > answer. I'm hoping something has changed between now and then (maybe > with 3.07?). > > Here's the issue. Consider a project consisting of multiple modules > with lots of interdependencies. Imagine then that I want to add some > flexibility to the system by abstracting out some of the structure of > the system using a functor. Thus, I start out with modules A, B, C, and > I want to parameterize all these modules, let's say by the same module > X. So what I want is a version of the program where I can use A.F(X) > intead of A, B.F(X) instead of B, and so on. The problem is that I want > to allow references between these modules. Thus, B.F(X) needs access to > A.F(X), and C.F(X) needs access to both A.F(X) and B.F(X). The question > is, is there a reasonable way to achieve this? > > I can think of an unreasonable way. I can write the relevant functors > so that they can be embedded in a unified module U as follows: > > module U = > struct > module A = A.F(X) > module B = B.F(A,X) > module C = C.F(A,B,X) > end > > In other words, B and C and require in their functors explicit arguments > corresponding to the other modulse they need. This works, but it's > awfully ugly, not least because you have to write down some awful module > signatures in B and C to make this work. > > Is there any non-awful way to achieve this? The absence of this kind of > feature makes the entire functor system seem much less attractive for > adding any large-scale genericity. > > Yaron > > > ------------------- > To unsubscribe, mail caml-list-request@inria.fr Archives: > http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs > FAQ: http://caml.inria.fr/FAQ/ Beginner's list: > http://groups.yahoo.com/group/ocaml_beginners ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners