微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

区分类型的联合

如何解决区分类型的联合

有没有一种方法可以模仿Haskell中TypeScript的区分类型联合?我要执行以下操作:

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

data FinalType = A | W

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

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

但这不是很整洁,并且在添加了许多值构造函数后变得很烦人。在Haskell中有什么方法可以减轻这种情况?

解决方法

如罗宾·齐格蒙德(Robin Zigmond)所建议的,

data FinalType = A A | W W

将起作用。这具有A BA CW Z之类的值。除非您在这里不需要懒惰(相对不太可能),否则您应该使构造函数严格:

data FinalType = A !A | W !W

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

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

data FinalType = FinalA A | FinalW W

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。