gpt4 book ai didi

具有多种类型的 OCaml 签名

转载 作者:行者123 更新时间:2023-12-05 07:44:55 30 4
gpt4 key购买 nike

我想表示一些标量值(例如整数或字符串)通过它的实际值或一些 NA 值,然后存储它们在集合中(例如列表)。目的是处理缺失值。

为此,我实现了一个签名

module type Scalar = sig
type t
type v = Value of t | NA
end

现在我想到了一些包含 Scalar 的多态 Vector 类型。基本上就是下面的一些

module Make_vector(S: Scalar) = struct
type t = S.v list

... rest of the functor ...
end

但是,我无法让它工作。我想做类似的事情

module Int_vector = Make_vector(
struct
type t = int
end
)

module Str_vector = Make_vector(
struct
type t = string
end
)

... and so on for some types.

我还没有大量使用 OCaml,所以这可能不是正确的方法。关于如何实现这种具有求和类型的多态标量有什么建议吗?

编译器总是用以下消息响应:

The parameter cannot be eliminated in the result type. 
Please bind the argument to a module identifier.

之前,我曾尝试将 Scalar 实现为求和类型,但遇到了由于庞大的 match 子句,在实现某些功能时会出现复杂性问题。另一个(我觉得不太好)选项是使用 option。这是更好的策略吗?

最佳答案

据我所知,您正在将 v 构造为仿函数的输入类型,但您确实希望它成为输出类型。然后,当您应用仿函数时,您只提供类型 t 而不是 v。我的建议是将 v 的定义移动到您的 Make_vector 实现中。

关于具有多种类型的 OCaml 签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42377013/

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