請看下面的例子: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) –