OCaml子模块受子签名约束

时间:2015-08-24 08:19:08

标签: module ocaml

我有一个受签名Mod约束的模块Sig。该模块有一个Nested子模块。签名具有匹配的Nested子签名:

module type Sig = sig
  val a : int
  module type Nested = sig
    val b : int
  end
end

module Mod : Sig = struct
  let a = 1
  module Nested = struct
    let b = 2
  end
end

但是,这会出现以下错误:

Error: Signature mismatch: 
       Modules do not match: 
         sig val a : int module Nested : sig val b : int end end 
       is not included in 
         Sig 
       The field `Nested' is required but not provided

我错过了什么?

1 个答案:

答案 0 :(得分:7)

在代码中声明嵌套模块的方法是错误的:

module type Sig = sig 
    val a : int 
    module Nested : sig val b : int end 
  end

module Mod : Sig = struct
  let a = 1
 module Nested = struct 
   let b = 2 
 end
end

查看子模块如何在以下链接中声明:http://caml.inria.fr/pub/docs/oreilly-book/html/book-ora131.html

帮助我修复错误。