我想定义一个3D向量,其中x, y, z
坐标。向量可以使用(+)
运营商加入,并且可以使用length
功能Haskell定义一个向量时模糊发生(+)
我碰到下面的错误来计算的长度,如果我想编译:
It could refer to either `Prelude.+',
imported from `Prelude' at hello.hs:1:1
(and originally defined in `GHC.Num')
or `Main.+', defined at hello.hs:9:14
的代码是:
data Vec3 = Vec3 {
x :: Float,
y :: Float,
z :: Float
} deriving (Eq,Show)
(+) :: Vec3 -> Vec3 -> Vec3
(Vec3 a b c) + (Vec3 t u w) = Vec3 (a+t) (b+u) (c+w)
length :: Vec3 -> Float
length (Vec3 a b c) = sqrt(a*a + b*b + c*c)
vv = Vec3 1.5 0.7 2.2
main :: IO()
main = do
print $ length vv
+1对于_not_不推荐'Num'实例,但是'Monoid'也不是那么棒的IMO,因为它不允许标量乘法。 – leftaroundabout