将多个变体合并为一个变体



有没有办法将多个变体组合成一个?像这样:

type pet = Cat | Dog;
type wild_animal = Deer | Lion;
type animal = pet | wild_animal;

这是一个语法错误,但我希望动物成为具有四个构造函数的变体:Cat | Dog | Deer | Lion.有没有办法做到这一点?

多态变体是根据您的想法创建的。它们作为内存表示的效率较低,但是如果要将其编译为JavaScript并不重要:

type pet = [ | `Cat | `Dog];
type wild_animal = [ | `Deer | `Lion];
type animal = [ pet | wild_animal ];

我希望动物成为具有四个构造函数的变体: 猫 |狗 |鹿 |狮子。有没有办法做到这一点?

你不能直接这样做。这意味着Cat有类型pet,但也有类型wild_animal。使用普通变体是不可能的,普通变体始终具有单一类型。然而,正如另一个答案所描述的那样,这对于多态变体是可能的。

另一种更常见的解决方案(但这取决于您要实现的目标(是定义第二层变体:

type pet = Cat | Dog
type wild_animal = Deer | Lion
type animal = Pet of pet | Wild_animal of wild_animal

这样,Cat具有类型pet,但Pet Cat具有类型animal

相关内容

  • 没有找到相关文章

最新更新