Die season
Funktion verwendet algebraische Funktionen, aber ich denke, der Code wiederholt sich.
Wie mache ich es so kurz wie möglich?
data Month = Jan | Feb | Mar | Apr | May | June | July | Aug | Sept| Oct | Nov | Dec
deriving (Eq,Ord,Show,Read)
data Seasons = Spring | Summer | Autumn | Winter
deriving (Eq,Ord,Show,Read)
season :: Month -> Seasons
season Jan = Winter
season Feb = Winter
season Mar = Spring
season Apr = Spring
season May = Spring
season June = Summer
season July = Summer
season Aug = Summer
season Sept = Autumn
season Oct = Autumn
season Nov = Autumn
season Dec = Winter
haskell
algebraic-data-types
Stephen Adams
quelle
quelle
Antworten:
Sie können Wachen verwenden, da Sie
Month
eine Instanz vonOrd
:quelle
Fügen
Enum
Siederiving
dann die Klauseln Ihrer beiden Datentypdefinitionen hinzuDrei Monate in einer Saison, vier Jahreszeiten in einem Jahr, der Frühling beginnt im März.
quelle
Dies ist der Antwort von Will Ness (Rechnen mit Monatsindizes durch
Enum
Instanzen) sehr ähnlich , nur aus Gründen der Lesbarkeit mit ein paar Änderungen:In jedem Fall gibt es etwas zu sagen, das Ihre ursprüngliche Lösung unterstützt und alle Fälle explizit auflistet, da sie so einfach ist. Die Wiederholbarkeit beim Schreiben kann durch Verwendung einer
case
Anweisung anstelle mehrerer Gleichungen etwas verringert werden.quelle