2016-03-20 14 views
0
data Months = January|February|March|April|May|June|July 
     deriving (Eq, Ord, Enum) 
instance Show Months where 

show January="Jan" 
show February="Feb" 
show March="Mar" 
.... 

Was muss ich die Ausgabe als solche zeigen tun: „Jan“, „Februar“, ..., „Juli“Haskell zeigen Daten

+2

es ist unklar, was Sie fragen - brauchen Sie Hilfe mit Ihrer 'Show'-Instanz - es ist falsch eingerückt Verwendung mindestens 2 Leerzeichen vor jedem' show ... '; wenn du meinst, wie man es in der Kommandozeile ausdruckt - benutze 'print Januar' oder 'putStrLn $ zeige Januar' – epsilonhalbe

+1

Ich würde auch deinen Datentyp' Monat' nennen - da der Plural normalerweise eine Liste von Dingen angibt (das ist nur Konvention) . – epsilonhalbe

Antwort

1

Show automatisch abgeleitet werden:

data Months = January | February | March | April | May | June | July 
       deriving (Eq, Ord, Enum, Show) 

Und so:

λ> show January 
"January" 

ich es annehmen könnte ein guter Grund sein, dass Sie Ihre Show Instanz darstellen möchten, Diese abgekürzten Monatsnamen, aber warum ändern Sie nicht einfach die Namen Ihrer Datenkonstruktoren?

+0

statt Januar anzeigen, kann ich es so haben, dass, wenn ich Monate zeige, sie alle angezeigt werden? @mdunsmuir – benjy1911

+0

@ benjy1911 Verwenden Sie 'show [Januar .. Juli]'. Mit der 'Enum'-Instanz können Sie alle Monate der Reihe nach generieren. – user2407038

+0

Oder, besser noch, leiten Sie auch 'Bounded' und' show [minBound .. maxBound] 'ab, für den Fall, dass später weitere Monate hinzugefügt werden. – Ingo