Let's say I create an enumerable data set (or two) in Haskell.
data Note = C | CsDb | D | DsEb | E | F | FsGb | G | GsAb | A | AsBb | B deriving (Read, Show, Eq, Ord)
data Diatonic = Unison | Min2 | Maj2 | Min3 | Maj3 | Per4 | Tritone | Per5 | Min6 | Maj6 | Min7 | Maj7 | Octave deriving (Read, Show, Eq, Ord)
I'd like to have access to a list of these values, and this is the only way I know how:
notes :: [Note]
notes = [C, CsDb, D, DsEb, E, F, FsGb, G, GsAb, A, AsBb, B]
diatonics :: [Diatonic]
diatonics = [Unison, Min2, Maj2, Min3, Maj3, Per4, Tritone, Per5, Min6, Maj6, Min7, Maj7, Octave]
This seems like redundant boilerplate. Is this the only way to create such a list, or can Haskell do it for me somehow?