   }
 }
 
+public func ==(lhs: NewChordTetradType?, rhs: NewChordTetradType?) -> Bool {
+  switch (lhs, rhs) {
+    case (.some(let left), .some(let right)):
+      switch (left, right) {
+        case (.sixth, .sixth):
+          return true
+        case (.seventh(.dominant), .seventh(.dominant)):
+          return true
+        case (.seventh(.major), .seventh(.major)):
+          return true
+        default:
+          return false
+      }
+  case (.none, .none):
+    return true
+  default:
+    return false
+  }
+}
+
 public enum NewChordTetradType: ChordDescription {
   case sixth // triad and sixth note
   case seventh(NewChordSeventhType) // triad and seventh note


public enum NewChordAccidentType: ChordDescription {
  case natural // no accident
  case bemol // halfstep down
  case sharp // halfstep up

  public var notation: String {
    switch self {
    case .natural: return ""
    case .bemol: return "♭"
    case .sharp: return "♯"
    }
  }


  public var description: String {
    return "\(key) \(type)"
  }

  public static func from(notes: [Note]) -> [NewChord] {

    return []
  }

  public static var all: [NewChord] {
