我有以下类型的类实例:Haskell - 无法匹配预期的类型。帮助我理解这个问题
type Scalar = Double
data Vector = Vector [Double] deriving (Show, Eq)
instance Num Vector where
(+) (Vector xs) (Vector ys) = Vector (zipWith (+) xs ys)
(-) (Vector xs) (Vector ys) = Vector (zipWith (-) xs ys)
(*) (Vector xs) (Vector ys) = Vector (zipWith (*) xs ys)
instance Fractional Vector where
(/) (Vector xs) (Vector ys) = Vector (zipWith (/) xs ys)
dot :: Vector -> Vector -> Vector
dot (Vector v1) (Vector v2) = sum $ v1 + v2
然而,点方法不键入检查。我猜它不能使用+方法,即使它在Vector类上。
No instance for (Num [Double])
arising from a use of `+'
Possible fix: add an instance declaration for (Num [Double])
In the second argument of `($)', namely `v1 + v2'
In the expression: sum $ v1 + v2
In an equation for `dot':
dot (Vector v1) (Vector v2) = sum $ v1 + v2
编辑:嗯,这真丢人。
我不太明白为什么'sum'在你的函数中工作(你去哪里总结v3',其中'v3'是一个' Vector'),但我无法像这样调用Vector的总和:'sum(Vector [3 3 3])' –
'v3'不是矢量,它是一个'[Double]',因为它是从一个'VECTOR'。 – huon
@ DominicBou-Samra我已经扩展了一些解释并重新命名了变量以提供类型提示,所以现在我已经调用了'v3'' list3' - 这有帮助吗? – AndrewC