ocaml:括号中包含关键字 val 的表达式是什么?

Dav*_*ong 3 ocaml

我在这里遇到了这段代码,但我不明白其语法:

module Proof = (val p)
Run Code Online (Sandbox Code Playgroud)

我知道val可以在模块类型或签名中使用,但我还没有看到它以这种方式使用。

小智 6

此语法用于解压第一类模块。

module type IntWrapper = sig
  val wrappedInt : int
end

module MyIntWrapper : IntWrapper = struct
  let wrappedInt = 2
end

(* pack a module into a value *)
let packedModule = (module MyIntWrapper : IntWrapper)

(* unpack module *)
module UnpackedModule = (val packedModule : IntWrapper)

(* or *)
module UnpackedModule' : IntWrapper = (val packedModule)

Run Code Online (Sandbox Code Playgroud)

参考:真实世界的ocaml书籍