gpt4 book ai didi

haskell - 允许数据构造函数的多个声明

转载 作者:行者123 更新时间:2023-12-02 12:44:34 25 4
gpt4 key购买 nike

我目前正在尝试数据类型,并且遇到了涉及数据构造函数的多个声明的问题。

data DBPosition = Unknown
| Omega Integer
| Delta Integer
deriving (Show, Eq, Ord)

data DBGeometry = Unknown | Cis | Trans
deriving (Show, Eq, Ord)

data DoubleBond = DoubleBond DBPosition DBGeometry
deriving (Show, Eq, Ord)

如果我要创建一个值,例如 - let bond = DoubleBond Unknown Unknown,那么可以推断第一个 Unknown 的类型为 DBPosition 而第二个 Unknown 的类型为 DBPosition。不幸的是,情况并非如此:

test.hs:6:27:
Multiple declarations of `Unknown'
Declared at: test.hs:1:27
test.hs:6:27
Failed, modules loaded: none.

是否有任何语言扩展可以用来解决这个问题?

最佳答案

正如 Carsten 上面指出的,您的定义不起作用,因为您有两个同名的构造函数。你需要使用例如UnknownDBPositionUnknownDBGeometry。然而,我认为更好的解决方案来自于认识到:

  • 无论您谈论的是双键位置、几何形状还是其他任何内容,未知值的概念都以完全相同的方式起作用;和
  • 那个未知实际上并不是各种双键几何形状或位置。

既然如此,我建议您删除 Unknown 并使用 Maybe 来指定缺乏知识。

data DBPosition = Omega Integer
| Delta Integer
deriving (Show, Eq, Ord)

data DBGeometry = Cis | Trans
deriving (Show, Eq, Ord)

data DoubleBond = DoubleBond (Maybe DBPosition) (Maybe DBGeometry)
deriving (Show, Eq, Ord)

关于haskell - 允许数据构造函数的多个声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32389885/

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