我一直在浏览“Learn You a Haskell”一书,我正试图围绕 Haskell 类型类。作为实践,我正在尝试创建一个简单的矢量类型类。下面的代码片段让我有些悲伤(导致我在 StackOverflow 上的第一篇文章):
data Vec2 a = Vec2 (a,a) deriving (Show, Eq, Read)
class Vector a where
(<*) :: (Num b) => a -> b -> a
instance (Num a) => Vector (Vec2 a) where
Vec2 (x,y) <* a = Vec2 (a*x, a*y)
我收到以下错误消息:
Could not deduce (a~b) from the context (Num a) or from (Num b) bound by the type signature for
<* :: Num b => Vec2 a -> b -> Vec2 a
似乎typeclass 中Num
指定的内容应该提供 of 的类型a
,而Num a
实例中的规范应该提供 and 的类型x
,y
那么为什么会抱怨呢?我对这段代码有什么误解?