2017-12-28 36 views
1

Gibt es trotzdem zu überprüfen, wie Listen Instanzen der Show Klasse sind. Ich habe einen Datentyp wie folgt aus:Liste als Instanz der Show

data Graph a = Graph [a], und ich will es eine Instanz von Show machen, so dass wenn ich show Funktion aufrufen kann, ich nur Liste bekommen und nicht das Wort Graph mit ihm.

Ich versuchte dies, aber ich weiß, das würde nicht funktionieren, weil show gibt eine Zeichenfolge zurück und x ist eine Liste. Ich lerne von Lernen Sie Haskell für eine gute gute. Es gibt kein Beispiel, und ich kann auch keine im Internet finden.

instance Show (Graph a) where 
    show (Graph x) = x 

Wie kann ich dieses Ergebnis erhalten?

+1

Gibt es einen Grund, warum Sie 'Daten Graph a = Graph [a]' statt 'newtype Graph a = Graph [a]' verwenden? Der übliche Standardwert für Einzelkonstrukteur-Einzelfeldtypen ist 'newtype'; Wir verwenden 'Daten' nur dann, wenn wir für einen bestimmten Zweck ein zusätzliches bisschen Faulheit brauchen. – dfeuer

+0

@dfeuer Es ist der nächste Abschnitt, ich habe diesen Abschnitt nicht gelesen. –

Antwort

5
instance Show a => Show (Graph a) where 
    show (Graph x) = show x 

Wir haben die enthaltenen Liste anzuzeigen, so können wir x nicht zurück, aber wir müssen show x zurück. Dies erfordert wiederum, dass die Liste x vom Typ [a] angezeigt werden kann, also müssen wir den Kontext Show a => ... verwenden.

+2

Es ist erwähnenswert, dass obwohl dies * wie eine rekursive Funktion aussieht, ist es nicht. Die "Show", die Sie anrufen, ist völlig anders als die "Show", die Sie deklarieren. –

+1

(Sie sollten aber 'showPrec' anstelle von' show' implementieren.) –

3

zeigen einfach die Liste:

show (Graph x) = show x 
Verwandte Themen