如何在OCaml中使用函子

时间:2018-12-15 15:25:05

标签: ocaml functor

我在互联网上找不到如何使用我写的函子。如果您需要更多上下文信息,我将发布一个最少的代码,然后我将添加,但是我敢肯定这确实很容易。

我想我只是不了解什么是函子,我看到这样的事情(由于我是OCaml的新手,所以我将使用Java的类比来阐明我的理解):

  • sig(=)接口MyInterface
  • struct(=)对象实现MyInterface
  • functor(=)MyInterfaceBis扩展了MyInterface

下面要给出的示例很愚蠢,只是为了让我理解其中的概念:

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,但是它没有使用我的符号,所以我比以前更困惑。

1 个答案:

答案 0 :(得分:2)

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

module NewF = F2 (F)

有关更多信息,请参见the section about functors in Real World OCaml