Ich werde einige grundlegende Implementierungen über typeclass:Automatische Erkennung von Typen bei Verwendung von typeclass-Instanzen?
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’
Offensichtlich funktioniert dies, wenn ich print $ isEqual (100 :: Int) (100 :: Int)
angeben
Warum Haskell implizit anerkennen, dass Red
und Green
Colours
sind noch verlangt, dass ich speziell 100
zu binden Int
?
"Grundgleichheit" ist eine ziemlich seltsame Form der Gleichheit. –