我在这里遇到了这段代码,但我不明白其语法:
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书籍