如何在 OCaml 中使用仿函数

How to use a functor in OCaml

我在 Internet 上找不到如何使用我编写的仿函数。我将 post 一个最小的代码,如果您需要更多上下文信息,请告诉我,我会添加,但我相信这真的很容易做到。

我想我只是不明白函子是什么,我看到了这样的事情(我将使用 Java 的类比来说明我的理解,因为我是 OCaml 的新手):

下面我要给出的例子很愚蠢,只是为了让我理解它背后的概念:

module type tF = sig
type 'a t
  val create : 'a t
end

module F : tF = struct
  type 'a t = 'a list
  let create = []
end

module type tF2 = functor(F : tF) -> sig
  val foo : 'a F.t -> 'a F.t
end

module F2 : tF2 = functor(F : tF) -> struct
  let foo f = f
end

我知道我可以做例如:

let test = F.create

但是我不知道F2怎么用

我试过这个 page 但它没有使用我的符号,我比以前更困惑了。

F2 接收类型为 tF 的模块并生成具有一个函数的模块 foo:

module NewF = F2 (F)

有关详细信息,请参阅 the section about functors in Real World OCaml