Let*_*thi 6 haskell typing subtyping
我已经开始这是一个新问题,因为它成为我上一个问题的后续问题.
如果我有两个由类似构造函数组成的数据类型:
data A = X | Y | Z
data B = X | Y
Run Code Online (Sandbox Code Playgroud)
有没有办法我可以用这种方式表示:
data A = C | Z
data B = C
data C = X | Y
Run Code Online (Sandbox Code Playgroud)
如果你能看到我在做什么 - 我正在尝试将X |分组 Y为一种数据类型,然后可由多种其他数据类型使用.我似乎无法让编译器允许这个,或者如果它,我不能模式匹配X或Y,只有C ??
我收到多次声明C的错误消息.
我以为我可以使用类型,但它们不允许多种类型.
编辑
即使我声明了很长的路(如下所示),它仍然无法编译,并且说X和Y有多个声明:
data A = X | Y | Z
data B = X | Y
Run Code Online (Sandbox Code Playgroud)
sep*_*p2k 13
不仅你不能做到这一点,你也不能做你的第一选择-即你不能有两个具有构造评为同一模块中的两种类型X
和Y
.
如果你能做到这一点,又该的型X
BE - C
,A
还是B
?最明显的答案是C
,但是你将无法在需要a A
或者a 的上下文中使用它B
(注意Haskell没有子类型),这样就会破坏整个构造的目的.
你能做的最好的事情是将C包装在A和B的构造函数中,即:
data A = AC C | Z
data B = BC C
data C = X | Y
Run Code Online (Sandbox Code Playgroud)
然后,你可以换一个C与任一AC
或BC
构造函数来创建类型的值A
或B
分别.