Das Folgende ist ein polymorpher Datentyp in Haskell, der von Hugs interpretiert wird. Ich versuche, eine Instanz von Show for Equality zu erstellen.
Die Instanzdeklaration besagt, dass wenn ein Typ "a" in Show ist, dann ist die Gleichheit a in Show. Es sollte die beiden Argumente für den Konstruktor Equals a b in der Form "a = b" ausgeben.
data Equality a = Equals a a
instance (Show a) => Show (Equality a) where
show (Equals a b) = a ++ " = " ++ b
Wenn Sie jedoch in Hugs etwas wie "(Equality 9 9)" eingeben, erhalten Sie ein Ergebnis:
ERROR - C-Stapelüberlauf
Also habe ich versucht, die Zeile "show (Equals a b)..." mit ein paar Leerzeichen einzurücken. Ich bin mir nicht sicher, was der Unterschied sein würde, aber ich habe nur herumgespielt und dann das hier bekommen:
Inferred type is not general enough
*** Expression : show
*** Expected type : Show (Equality a) => Equality a -> String
*** Inferred type : Show (Equality [Char]) => Equality [Char] -> String
Kann jemand erklären, warum diese Fehler auftreten, oder einen besseren Weg vorschlagen, diese Show-Instanz zu implementieren?
Ich danke Ihnen!