gpt4 book ai didi

haskell - 在 Haskell 中使用数据类型

转载 作者:行者123 更新时间:2023-12-02 10:12:35 26 4
gpt4 key购买 nike

我开始了这个新问题,因为它是我上一个问题的后续问题。

如果我有两种由相似构造函数组成的数据类型:

data A = X | Y | Z
data B = X | Y

我有没有办法以某种方式将其表示为:

data A = C | Z
data B = C

data C = X | Y

如果你能看到我在做什么 - 我正在尝试将 X | 分组Y 转换为一种数据类型,然后可以被多种其他数据类型使用。我似乎无法让编译器允许这样做,或者如果允许,我无法与 X 或 Y 进行模式匹配,只能与 C 进行模式匹配?

我收到错误消息,指出 C 已声明多次。

我想我也许可以使用类型,但它们不允许多次输入。

编辑

即使我声明了很长的方式(如下所示),它仍然无法编译并显示 X 和 Y 有多个声明:

data A = X | Y | Z
data B = X | Y

最佳答案

你不仅不能这样做,你也不能做你的第一个选择 - 即你不能在同一个模块中有两种类型,并且它们都有名为 X 的构造函数。和Y .

如果你能做到这一点, X 的类型应该是什么?是 - C , AB ?最明显的答案是 C ,但是您将无法在 A 的上下文中使用它。或B是必需的(请注意,Haskell 没有子类型),因此这会破坏整个构造的目的。

你能做的最好的事情就是将 C 包装在 A 和 B 的构造函数中,即:

data A = AC C | Z
data B = BC C
data C = X | Y

然后你可以用 AC 包裹一个 C或BC构造函数来创建 A 类型的值或B分别。

关于haskell - 在 Haskell 中使用数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12343206/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com