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] Parameterizing multiple modules using functors
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ 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

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 =
   module A = A.F(X)
   module B = B.F(A,X)
   module C = C.F(A,B,X)

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.


To unsubscribe, mail Archives:
Bug reports: FAQ:
Beginner's list: