我想定義一個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