gpt4 book ai didi

haskell - 重载(+)

转载 作者:行者123 更新时间:2023-12-02 06:55:48 27 4
gpt4 key购买 nike

我正在尝试在 Haskell 中定义 Vector3 数据类型,并允许在其上使用 (+) 运算符。我尝试了以下方法:

data Vector3 = Vector3 Double Double Double    
Vector3 x y z + Vector3 x' y' z' = Vector3 (x+x') (y+y') (z+z')

但是 ghci 提示 (+) 的出现不明确。我不明白为什么这个事件是模棱两可的;当然,类型检查器可以推断出 xx'y 等具有类型 Double,因此是正确的运算符用于它们的是 Prelude.+?

我知道我可以使 Vector3 成为 Num 类型类的实例,但这对我来说限制太大;我不想定义一个向量与另一个向量的乘法。

最佳答案

在 Haskell 中重载名称的唯一方法是使用类型类,因此您有三种选择:

  • Vector 设为 Num 的实例,并且仅让乘法返回错误
  • 使用类似 the numeric prelude 的内容,它定义了更细粒度的数字类。
  • 选择其他名称,例如 .+. 或类似的名称以进行向量加法。

关于haskell - 重载(+),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7646624/

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