Neue Instanz-Deklaration für die Show
Ich versuche, fügen Sie eine Instanz-Deklaration in Haskell für einen neuen Datentyp, die ich erstellt habe, leider erfolglos. Hier was ich bisher ausprobiert habe:
data Prediction = Prediction Int Int Int
showPrediction :: Prediction -> String
showPrediction (Prediction a b c) = show a ++ "-" ++ show b ++ "-" ++ show c
instance Show (Prediction p) => showPrediction p
Scheint die Letzte Zeile ist falsch, aber ich bin mir nicht sicher, wie Sie Sie zu erreichen, was ich will. Im Grunde ist in der Lage, um den Interpreten eine Vorhersage-variable und get es visualisiert die zimmerreserviereung, ohne das zu nennen, die showPrediction. Jetzt geht das so:
showPrediction (Prediction 1 2 3)
und zeigt:
"1-2-3"
als erwartet, aber ich möchte diese Arbeit (der Dolmetscherin):
Prediction 1 2 3
Irgendwelche Ideen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zur Ableitung einer Instanz, die syntax ist
Also hier, zum Beispiel, würden Sie haben
Gibt es keine Voraussetzung; Sie würde verwenden, für so etwas wie
instance Show a => Show [a] where ...
, die sagt, dass wenna
ist Darstellbare, dann ist[a]
. Hier, allePredictions
sind Darstellbare, so gibt es nichts zu befürchten. Wenn Sie schriebinstance Show (Prediction p) => showPrediction p
Sie ein paar Fehler gemacht. ZuerstPrediction p
impliziert, dassPrediction
ist ein parametrisierten Typen (eines erklärt, zum Beispieldata Prediction a = Prediction a a a
), was es nicht ist. ZweitensShow (Prediction p) =>
impliziert, dass wennPrediction P
ist Darstellbare, dann Sie wollen, zu erklären, die von einer anderen Instanz. Und drittens, nachdem die=>
, eine Funktion unsinnig—Haskell wollte eine Art Klassenname.Auch, der Vollständigkeit halber, es gibt eine andere Weise abzuleiten
Show
wenn Sie möchten, dass diePrediction 1 2 3
format für die angezeigten Ausgabe:Wie angegeben, in der Haskell 98 report, gibt es nur eine Handvoll Typen, die abgeleitet werden können, auf diese Weise:
Eq
,Ord
,Enum
,Bounded
,Show
, undRead
. Mit die entsprechenden GHC-Erweiterungen, können Sie auch ableitenData
,Typeable
,Functor
,Foldable
, undTraversable
; Sie ableiten kann jede Klasse, die einenewtype
's gewickelt, abgeleiteter Typ für einenewtype
; und Sie erzeugen können diesen automatische Instanzen, die in einem eigenständigen Weg.Hast du die syntax für die Instanzen falsch. Erstellen Sie eine Instanz der
Show
schreiben:wo
...
enthält die definition dershow
Funktion fürFoo
.So, in diesem Fall Sie wollen:
oder, da gibt es nicht einen wichtigen Grund zu haben
showPrediction
an alle:Ersetzen Sie Ihre Letzte Zeile mit: