Excerpts from Hendrik Tews's message of Fri Apr 04 23:30:58 +0200 2008: > "Nicolas Pouillard" writes: > > I think that's doable (not tested), basically you need three > primitive functors: > > I don't see how. Let me clarify again what I mean. And let me > clarify that I only pursue this discussion out of curiosity, to > see, what can be done with the functorial Camlp4 interface. > > Assume we have a table like this: > > s1.cmo s2.cmo ... : f1.ml f2.ml ... > s3.cmo s4.cmo ... : f3.ml f4.ml ... > > The sx.cmo files are Camlp4 syntax extentions and the fx.ml are > files to be parsed using those syntax extentions. There are a > number of possible solutions: > - starting camlp4 for each file or each row > - clearing PreCast.Syntax before each row and then calling the > callbacks that the syntax extensions registered > > But I would like to know if the functorial Camlp4 design is > strong enough to solve this exercise within one program (without > fork/exec) and without reusing/clearing one syntax module. > > It is clear that the registration in Register.SyntaxExtension is > not good enough, because it always applies the syntax extension > to PreCast.Syntax. > > However, even with changing Register.SyntaxExtension or how > syntax extensions register themselves, I can't see a solution. That's some corner case where first-class modules would help a lot, however one can use some black magic under the hood to get the same effect. One need to store extensions once and for all, in a map from names to "modules". Then one can have some function (functor) that takes a list modules names and an initial module, and will apply these extensions to it. -- Nicolas Pouillard aka Ertai