gpt4 book ai didi

OCaml 签名仿函数

转载 作者:行者123 更新时间:2023-12-04 03:01:16 24 4
gpt4 key购买 nike

我正在尝试扩展 OCaml 中的仿函数。例如,假设以下仿函数 X:

module type X = functor (A : ModuleA) -> I with type t := A.t

我正在尝试创建一个类似的仿函数 Y,它也接受 A : Module A 但返回 I 的扩展版本。我正在尝试类似的东西:

module type Y = functor (A : ModuleA) ->
sig
include X(A)
val blah : A.t -> int
end

但是我得到一个语法错误。我正在尝试使用更多功能从 X 扩展生成的签名。这在 OCaml 中可能吗?我做错了什么?

谢谢!

编辑:

我想我的问题是:为什么仿函数对模块和模块类型的行为不同?

上面的仿函数 X 返回一个模块类型(或者至少我是这样读那个表达式的)。如果允许此表达式,那么为什么 OCaml 禁止扩展生成的模块类型?

最佳答案

不幸的是,据我所知这是不可能的。你将不得不做

module type Y = functor (A : ModuleA) ->
sig
include I with type t := A.t
val blah : A.t -> int
end

希望其他人可以详细说明您尝试使用的功能未实现的原因。可能有一个很好的理由。

编辑:

如果你已经有了X类型的模块XX(一个实例),你可以这样做

module type Y = functor (A : ModuleA) ->
sig
include module type of XX(A)
val blah : A.t -> int
end

关于OCaml 签名仿函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49007857/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com