   case major
   case minor
   case harmonicMinor
+  case melodicMinor
+  case pentatonicMajor
+  case pentatonicMinor
+  case pentatonicBlues
+  case pentatonicNeutral
+  case ionian
+  case aeolian
   case dorian
+  case mixolydian
   case phrygian
   case lydian
-  case mixolydian
   case locrian
+  case dimHhalf
+  case dimWhole
+  case whole
+  case augmented
+  case chromatic
+  case roumanianMinor
+  case spanishGypsy
+  case blues
+  case diatonic
+  case doubleHarmonic
+  case eightToneSpanish
+  case enigmatic
+  case leadingWholeTone
+  case lydianAugmented
+  case neopolitanMajor
+  case neopolitanMinor
+  case pelog
+  case prometheus
+  case prometheusNeopolitan
+  case sixToneSymmetrical
+  case superLocrian
+  case lydianMinor
+  case lydianDiminished
+  case nineToneScale
+  case auxiliaryDiminished
+  case auxiliaryAugmented
+  case auxiliaryDimBlues
+  case majorLocrian
+  case overtone
+  case diminishedWholeTone
+  case pureMinor
+  case dominant7th
   case custom(intervals: [Interval])
 
   /// Intervals of the scale.

  /// An array of all `ScaleType` values.
  public static var all: [ScaleType] {
    return [
      .major, .minor, .harmonicMinor, .dorian, .phrygian,
      .lydian, .mixolydian, .locrian
    ]
  }
}

    switch self {
    case .major: return [.unison, .M2, .M3, .P4, .P5, .M6, .M7]
    case .minor: return [.unison, .M2, .m3, .P4, .P5, .m6, .m7]
    case .harmonicMinor: return [.unison, .M2, .m3, .P4, .P5, .m6, .M7]
    case .dorian: return [.unison, .M2, .m3, .P4, .P5, .M6, .m7]
    case .phrygian: return [.unison, .m2, .m3, .P4, .P5, .m6, .m7]
    case .lydian: return [.unison, .M2, .M3, .d5, .P5, .M6, .M7]
    case .mixolydian: return [.unison, .M2, .M3, .P4, .P5, .M6, .m7]
    case .locrian: return [.unison, .m2, .m3, .P4, .d5, .m6, .m7]
    case .melodicMinor: return [.unison, .M2, .m3, .P4, .P5, .M6, .M7]
    case .pentatonicMajor: return [.unison, .M2, .M3, .P5, .M6]
    case .pentatonicMinor: return [.unison, .m3, .P4, .P5, .m7]
    case .pentatonicBlues: return [.unison, .m3, .P4, .d5, .P5, .m7]
    case .pentatonicNeutral: return [.unison, .M2, .P4, .P5, .m7]
    case .ionian: return [.unison, .M2, .M3, .P4, .P5, .M6, .M7]
    case .aeolian: return [.unison, .M2, .m3, .P4, .P5, .m6, .m7]
    case .dimHhalf: return [.unison, .m2, .m3, .M3, .d5, .P5, .M6, .m7]
    case .dimWhole: return [.unison, .M2, .m3, .P4, .d5, .m6, .M6, .M7]
    case .whole: return [.unison, .M2, .M3, .d5, .m6, .m7]
    case .augmented: return [.m3, .M3, .P5, .m6, .M7]
    case .chromatic: return [.unison, .m2, .M2, .m3, .M3, .P4, .d5, .P5, .m6, .M6, .m7, .M7]
    case .roumanianMinor: return [.unison, .M2, .m3, .d5, .P5, .M6, .m7]
    case .spanishGypsy: return [.unison, .m2, .M3, .P4, .P5, .m6, .m7]
    case .blues: return [.unison, .m3, .P4, .d5, .P5, .m7]
    case .diatonic: return [.unison, .M2, .M3, .P5, .M6]
    case .doubleHarmonic: return [.unison, .m2, .M3, .P4, .P5, .m6, .M7]
    case .eightToneSpanish: return [.unison, .m2, .m3, .M3, .P4, .d5, .m6, .m7]
    case .enigmatic: return [.unison, .m2, .M3, .d5, .m6, .m7, .M7]
    case .leadingWholeTone: greturn [.unison, .M2, .M3, .d5, .m6, .M6, .m7]
    case .lydianAugmented: return [.unison, .M2, .M3, .d5, .m6, .M6, .M7]
    case .neopolitanMajor: return [.unison, .m2, .m3, .P4, .P5, .M6, .M7]
    case .neopolitanMinor: return [.unison, .m2, .m3, .P4, .P5, .m6, .m7]
    case .pelog: return [.unison, .m2, .m3, .d5, .m7, .M7]
    case .prometheus: return [.unison, .M2, .M3, .d5, .M6, .m7]
    case .prometheusNeopolitan: return [.unison, .m2, .M3, .d5, .M6, .m7]
    case .sixToneSymmetrical: return [.unison, .m2, .M3, .P4, .m6, .M6]
    case .superLocrian: return [.unison, .m2, .m3, .M3, .d5, .m6, .m7]
    case .lydianMinor: return [.unison, .M2, .M3, .d5, .P5, .m6, .m7]
    case .lydianDiminished: return [.unison, .M2, .m3, .d5, .P5, .m6, .m7]
    case .nineToneScale: return [.unison, .M2, .m3, .M3, .d5, .P5, .m6, .M6, .M7]
    case .auxiliaryDiminished: return [.unison, .M2, .m3, .P4, .d5, .m6, .M6, .M7]
    case .auxiliaryAugmented: return [.unison, .M2, .M3, .d5, .m6, .m7]
    case .auxiliaryDimBlues: return [.unison, .m2, .m3, .M3, .d5, .P5, .M6, .m7]
    case .majorLocrian: return [.unison, .M2, .M3, .P4, .d5, .m6, .m7]
    case .overtone: return [.unison, .M2, .M3, .d5, .P5, .M6, .m7]
    case .diminishedWholeTone: return [.unison, .m2, .m3, .M3, .d5, .m6, .m7]
    case .pureMinor: return [.unison, .M2, .m3, .P4, .P5, .m6, .m7]
    case .dominant7th: return [.unison, .M2, .M3, .P4, .P5, .M6, .m7]
    case .custom(let intervals): return intervals
    }
  }
