我正在尝试在Haskell中定义一个Vector3数据类型,并允许在其上使用(+)运算符。我尝试了以下几种方法:
data Vector3 = Vector3 Double Double Double
Vector3 x y z + Vector3 x' y' z' = Vector3 (x+x') (y+y') (z+z')但ghci抱怨(+)的出现不明确。我不明白为什么出现的内容是不明确的;类型检查器肯定可以推断出x、x'、y等具有类型Double,因此正确的运算符是Prelude.+
我知道我可以让Vector3成为Num类型类的一个实例,但这对我来说限制太多了;我不想定义一个向量与另一个向量的乘法。
发布于 2011-10-04 19:49:09
在Haskell中重载名称的唯一方法是使用类型类,因此您有三种选择:
Vector成为Num的一个实例,只需让乘法返回一个类似于the numeric prelude的error..+.或类似的名称来进行向量加法。发布于 2011-10-04 18:47:31
我知道我可以让
Vector3成为Num类型类的一个实例,但这对我来说限制太多了;我不想定义一个向量与另一个向量的乘法。
不过,这将是最简单的解决方案。您可以将乘法定义为
(*) = error "vector multiplication not implemented"想一想你免费得到的向量运算!
https://stackoverflow.com/questions/7646624
复制相似问题