我在看一些基本的類型類的實現:使用類型類實例時自動識別類型?
data Colour = Red | Green | Black
class BasicEquality a where
isEqual :: a -> a -> Bool
instance BasicEquality Bool where
isEqual True True = True
isEqual False True = True
isEqual True False = True
isEqual _ _ = False
instance BasicEquality Colour where
isEqual Red Green = True
isEqual _ _ = False
instance BasicEquality Int where
isEqual 100 100 = True
isEqual _ _ = False
main = do
print $ isEqual Red Green //Output: True
print $ isEqual 100 100 //Output: Error Ambiguous type variable ‘a0’ arising from a use of ‘isEqual’
很明顯,但需要我特異性結合100
這個工程時,我指定print $ isEqual (100 :: Int) (100 :: Int)
爲什麼Haskell的含蓄承認Red
和Green
是Colours
Int
?
「基本平等」是一種非常奇怪的平等形式。 –