> the example given compiles
Ashish Agarwal wrote:This isn't true - the include statement works at a type system level
> If you only have a file ast.mli, you should not be able to write Ast.Sig
because you do not have a module named Ast.
(because you're dealing with a signature) and therefore only a .cmi file is
required. It does not generate any work for the linker so a module called
Ast is not actually needed when linking.
I'm afraid you should have checked - the example given compiles (try ocamlc
> Please double check your example. It cannot be working as you describe.
-o foo ast.mli toto.ml with suitable substitutions for the "..."s)
This is fine
Romain Bardou wrote:
> I have a file ast.mli. It has no .ml implementation as it contains only
> type definitions.
But as this involves a linker instruction you need an actual module - hence
the error you're seeing. I guess you could argue that the module statement
could check to see if Ast only contains type definitions and relax the need
for an actual module but in the general case Ast could contain values and so
you need a module to link against.
This workaround works because you take the whole thing back to the type
> I found a workaround, which is to change ast.mli to put all type
> definitions in a signature, such as:
system so module implementations are not required by the linker.
David