Sagen Sie bitte eine Datenstruktur haben (von diesem question entlehnt):Zugriff auf die "Standard-Show" in Haskell?
data Greek = Alpha | Beta | Gamma | Delta | Eta | Number Int
Nun kann man es eine Instanz von Show
machen durch deriving Show
auf diesen Befehl angehängt wird.
sagen aber wir wollen zeigen, Number Int
wie:
instance Show Greek where
show (Number x) = show x
-- ...
Das Problem ist, dass man muss alle anderen Teile der Greek
Daten angeben sowie wie:
show Alpha = "Alpha"
show Beta = "Beta"
Für diesen kleinen Beispiel, das ist natürlich machbar. Wenn die Anzahl der Optionen jedoch lang ist, erfordert dies viel Arbeit.
Ich frage mich, ob es möglich ist, auf die "Standard-Show" -Implementierung zuzugreifen und sie mit einem Platzhalterzeichen aufzurufen. Zum Beispiel:
instance Show Greek where
show (Number x) = show x
show x = defaultShow x
Sie also „implementieren“ die spezifischen Muster, die aus dem Standardansatz und die verbleibenden Muster unterscheiden sich durch die „Fallback-Mechanismus“ aufgelöst.
Etwas ähnlich der Methode überschreiben mit einem Verweis auf in der objektorientierten Programmierung.
Sicher, benutzen Sie einfach eine newtype Wrapper wie in der fast richtig, aber gelöscht Antwort. –
Der richtige Weg, dies zu tun ist, '.. abzuleiten Show' und dann einige hübsche Druckklasse (oder nur eine Funktion), die die Daten zeigt, wie Sie möchten. Außerdem gibt es keine Methodenüberschreibung in Haskell oder "super.method", da in Haskell keine Untertypen vorhanden sind. – user2407038
Die Funktion 'show' soll einen String generieren, der einen Haskell-Ausdruck enthält, der nach der Auswertung den ursprünglichen Wert zurückgibt. Wenn Sie etwas anderes benötigen, sollten Sie eine andere Funktion deklarieren (möglicherweise in einer eigenen Klasse). – chi