【发布时间】:2012-05-09 02:03:18
【问题描述】:
我想编写一个模块(在 Ocaml 3.12 中)能够将 Variant 类型定义为现有不同类型的聚合
可能是 0 到 N 个类型,所以是变量列表或集合
它可能看起来像这样:
type newtype = Type0 of type0 | Type1 of type1 | ... | TypeN of typeN
当然我想分解它的创建
首先我尝试创建一个由仿函数参数化的模块“复合”:
module Composite ( T0 : sig type t end ) ( T1 : sig type t end ) =
struct
type t = T0.t | T1.t
end
第一个困难:如何将函数的变量列表传递给“复合”模块?
这是一个好方法吗?
edit1 : Variant 允许定义一个 XOR 类型定义(它是 T0 或 T1 但不是两者);如何定义 OR 类型定义(可以是 T0 或 T1 或两者)?
【问题讨论】:
-
我不是模块和函子类型方面的专家(委婉地说),但在我看来,你正在与类型系统作斗争,以产生你已经可以用 @987654324 做的事情@.
-
我不认为您可以创建具有可变数量构造函数的类型,也不能创建具有可变数量参数的仿函数。但是,根据您的用例,可能会有更好的方法;换句话说:你真的需要那个吗?
-
Polymorphic variants 在模块系统之外,但它们最接近“现有构造函数的聚合”。
-
好的,所以模块不适合这里?但是,如何在复合类型上定义一组函数?
标签: module functional-programming ocaml functor