我想表示一些标量值(例如整数或字符串)
通过它的实际值或某个NA
值,然后存储它们
在集合(例如列表)中。目的是处理缺失值。
为此,我实施了签名
module type Scalar = sig
type t
type v = Value of t | NA
end
现在我有一些包含Vector
的多态Scalar
类型。基本上,以下一些
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一起工作过,所以也许这不是正确的方法。关于如何用sum类型实现这种多态标量的任何建议?
编译器始终响应以下消息:
The parameter cannot be eliminated in the result type.
Please bind the argument to a module identifier.
之前,我曾尝试将Scalar
作为总和类型实现但遇到了
由于巨大的match
子句而实现某些功能时的复杂性问题。另一个(imo不太好)选项是使用option
。这是一个更好的策略吗?
答案 0 :(得分:0)
据我所知,你正在构造v
作为你的仿函数的输入类型,但你真的希望它是一个输出类型。然后,当您应用仿函数时,您只提供t
类型而不是v
类型。我的建议是将v
的定义移到Make_vector
的实现中。