]>
On 21 July 2010 14:38, Dumitru Potop-Butucaru
<dumitru.potop_butucaru@inria.fr> wrote:
> module type Abc =
> functor (M:Simple) ->
> sig
> val x : M.t
> end
You're trying to treat Abc as a functor from signatures to signatures
(i.e. as a parameterised signature). In fact, it's something quite
different: it's the *type* of a functor from structures to structures.
You can emulate a parameterised signature using a signature with some
opaque components, which are later specified using substitution.
Here's the "parametrised signature":
module type ABC =
sig
module M : Simple
val x : M.t
end
Here's how to supply a value for M:
module MyModule :
sig
include ABC with module M = IntList
val y : int
end
= ...
In OCaml 3.12 you can use destructive substitution instead, ensuring
that M doesn't appear in the output signature. Note the ':=' in the
line that includes ABC:
module MyModule :
sig
include ABC with module M := IntList
val y : int
end
= ...