我希望能够用实际值或某些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的使用还不是很熟悉,也许这不是正确的方法。您有关于如何实现带有总和类型的多态标量的任何建议吗?
编译器始终会响应以下消息:
The parameter cannot be eliminated in the result type.
Please bind the argument to a module identifier.
之前,我曾试图将Scalar
实现为和类型,但由于庞大的match
语句而遇到了复杂性问题,无法实现一些功能。另一个(在我看来不太好的)选择是使用option
。这是更好的策略吗?