Browse thread
[Caml-list] Parameterizing multiple modules using functors
- Yaron Minsky
[
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: | Yaron Minsky <yminsky@c...> |
| Subject: | [Caml-list] Parameterizing multiple modules using functors |
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