繁体   English   中英

可区分类型联合

[英]Discriminated type unions

有没有办法在 Haskell 中模仿 TypeScript 的可区分类型联合? 我想做以下事情:

data A = B | C | D
data W = X | Y | Z

data FinalType = A | W

我知道最后一个定义将为FinalType创建两个值构造函数AW 我现在可以通过以下方式正确地制作FinalType

data FinalType = B | C | D | X | Y | Z

但这不是很整洁,并且在添加了大量值构造函数后变得很烦人。 有没有办法在 Haskell 中缓解这种情况?

正如罗宾·齐格蒙德所建议的那样,

data FinalType = A A | W W

将工作。 这采用ABACWZ等值。 除非你在这里需要懒惰(相对不太可能),你应该让构造函数变得严格:

data FinalType = A !A | W !W

这样,计算FinalType类型的值FinalType可以保证计算出它的实际内容。

请注意,与 Typescript 的联合类型不同,Haskell 的 sum 类型总是被区分的。 这就是AW构造函数在这里扮演的角色,而不是有一个公共字段来指示正在使用的类型。 初学者可能会对AW名称的重载感到困惑; 你可以通过定义更明确

data FinalType = FinalA A | FinalW W

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM