Module 返回模块的OCaml函数

Module 返回模块的OCaml函数,module,ocaml,Module,Ocaml,我有以下模块签名: module type X_INT = sig val x: int end 如何编写一个以整数为参数并生成X_INT类型模块的函数 let gen_module x = (* generates a module of type X_INT back *)??? 循序渐进,遵循OCaml模块系统的发展历史: 作为ML函子: module Gen_module( A : sig val x : int end ) = struct let x = A.x end m

我有以下模块签名:

module type X_INT = sig val x: int end
如何编写一个以整数为参数并生成X_INT类型模块的函数

let gen_module x = (* generates a module of type X_INT back *)???

循序渐进,遵循OCaml模块系统的发展历史:

作为ML函子:

module Gen_module( A : sig val x : int end ) = struct
  let x = A.x
end

module M = Gen_module(struct let x = 42 end)

let () = print_int M.x
但它不是一个函数,而是一个函子

通过本地let模块:

let gen_module x = 
  let module M = struct
    let x = x
  in
  print_int M.x
但是您只能在本地使用M

通过第一类模块:

let gen_module x = (module struct let x = x end: X_INT)

let m = gen_module 42

let () =
  let module M = (val m) in
  print_int M.x
最接近你想要的东西,但需要明确的包装和解包