请看下面的例子:Haskell - 添加typeclass?
data Dot = Dot Double Double
data Vector = Vector Double Double
首先,我想超载+
运营商Vector
加法。如果我想超载平等(==
)运算符,我会写什么样子:
instance Eq Vector where ...blahblahblah
但我找不到,如果有Add
类型类使Vector
的行为就像相加操作的类型。我甚至找不到Haskell类型类的完整列表,我知道只有少数来自不同的教程。这样的清单是否存在?
另外,我可以重载+
运营商将Vector
添加到Dot
(它似乎相当逻辑,不是吗?)。
为什么你需要区分点和矢量?正如其他人所提到的,(+)在Num类型类中,但不能用点和向量实现(+),因为两个参数必须是相同的类型。如果您可以将这两种类型视为可互换,那么您可以只有一种类型,并将该类型作为Num的一个实例。 – Boris
尽管您可能正在寻找'Num',那么'Monoid'类型也可能会对您感兴趣。请参阅其他资源[LYAH#monoids](http://learnyouahaskell.com/functors-applicative-functors-and-monoids#monoids) –