从单个 switch 语句返回各种类型的 ReasonML 方式

ReasonML way of returning various types from a single switch statement

我有预定义的类型,

type objA = {name: string}
type objB = {age: int}

我想要一个变体类型,

type test = 
| Atype(objA)
| Btype(objB)

并最终使用模式匹配来正确return每种类型所包含的值。

let testVariant = {name: "helloworld"}
switch(testVariant: test){
| Atype(v) => v
| Btype(v) => v
}

但是由于Atype和Btype里面的变量值不同,所以这是不可能的。我的问题是,如何使用模式匹配有条件地 return 一些不同类型的数据。

您可以使用 GADT 实现此目的(要更好地理解,请阅读此 Sketch)。

type objA = {name: string};
type objB = {age: int};

type test('a) =
  | Atype(objA): test(string)
  | Btype(objB): test(int);

let testVariant: type a. test(a) => a = {
  fun 
  | Atype(v) => v.name
  | Btype(v) => v.age
};