Ocaml 我们能把函子作为参数传递给另一个函子吗?

Ocaml 我们能把函子作为参数传递给另一个函子吗?,ocaml,Ocaml,我想知道我们是否可以在模块内安装一个本地模块。如果一个函子可以作为参数传递给另一个函子,就可以实现这一点。但我不确定我们是否能做到这一点 如果这是一个模糊的问题,我很抱歉 谢谢。是的,可以定义高阶函子。以下是一个简单的函子示例,它将第一个参数应用于第二个参数: module App (F : functor (X: sig end) -> sig end) (X: sig end) = F (X) 然而,这与具有局部模块的问题无关,局部模块非常简单,不需要函子。以下示例定义了子模块B,该

我想知道我们是否可以在模块内安装一个本地模块。如果一个函子可以作为参数传递给另一个函子,就可以实现这一点。但我不确定我们是否能做到这一点

如果这是一个模糊的问题,我很抱歉


谢谢。

是的,可以定义高阶函子。以下是一个简单的函子示例,它将第一个参数应用于第二个参数:

module App (F : functor (X: sig end) -> sig end) (X: sig end) = F (X)
然而,这与具有局部模块的问题无关,局部模块非常简单,不需要函子。以下示例定义了子模块B,该子模块B对a保持私有:

module A : (sig val g : unit -> unit end) = struct
  module B = struct
    let f () = print_endline "Hello"
  end
  let g = B.f
end

let () = A.g ()    (* valid, prints Hello *)
let () = A.B.f ()  (* invalid *)