我们可以将仿函数作为参数传递给另一个仿函数吗?

UnS*_*Sat 2 ocaml

我想知道我们是否可以在模块中有一个本地模块.如果可以将仿函数作为参数传递给另一个仿函数,则可以实现这一点.但我不确定我们是否可以这样做.

如果这是一个模糊的问题,我道歉.

谢谢.

Mar*_*bon 7

是的,可以定义更高阶的仿函数.下面是一个将第一个参数应用于第二个参数的仿函数的简单示例:

module App (F : functor (X: sig end) -> sig end) (X: sig end) = F (X)
Run Code Online (Sandbox Code Playgroud)

然而,这与具有本地模块的问题无关,这些模块非常简单并且不需要仿函数.以下示例定义了一个对A保持私有的子模块B:

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 *)
Run Code Online (Sandbox Code Playgroud)