Browse thread
Bug in the module system of version 3.12.0+beta1
[
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: | 2010-07-21 (14:13) |
From: | Jeremy Yallop <yallop@g...> |
Subject: | Re: [Caml-list] Bug in the module system of version 3.12.0+beta1 |
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 = ...