如何在 OCaml 中使用仿函数
How to use a functor in OCaml
我在 Internet 上找不到如何使用我编写的仿函数。我将 post 一个最小的代码,如果您需要更多上下文信息,请告诉我,我会添加,但我相信这真的很容易做到。
我想我只是不明白函子是什么,我看到了这样的事情(我将使用 Java 的类比来说明我的理解,因为我是 OCaml 的新手):
- sig (=) 接口 MyInterface
- struct (=) 对象实现 MyInterface
- 仿函数 (=) MyInterfaceBis extends 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 但它没有使用我的符号,我比以前更困惑了。
F2
接收类型为 tF
的模块并生成具有一个函数的模块 foo
:
module NewF = F2 (F)
有关详细信息,请参阅 the section about functors in Real World OCaml。
我在 Internet 上找不到如何使用我编写的仿函数。我将 post 一个最小的代码,如果您需要更多上下文信息,请告诉我,我会添加,但我相信这真的很容易做到。
我想我只是不明白函子是什么,我看到了这样的事情(我将使用 Java 的类比来说明我的理解,因为我是 OCaml 的新手):
- sig (=) 接口 MyInterface
- struct (=) 对象实现 MyInterface
- 仿函数 (=) MyInterfaceBis extends 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 但它没有使用我的符号,我比以前更困惑了。
F2
接收类型为 tF
的模块并生成具有一个函数的模块 foo
:
module NewF = F2 (F)
有关详细信息,请参阅 the section about functors in Real World OCaml。