Speaking of protocols

Here is another nice read about protocols; method overriding, in particular. Some examples:

class DBStore<T> {
  func store(a : T) {
    store T
  }
}

// Hello, generic Method Overloading by Protocol:
class DBStore<T> {
  func store<T: Storeable>(a : T) {
    store T
  }
  
  func store<T: Interim>(a : T) {
    compress T
  }
    
  // And more advanced:  
  func store<T: Storeable where T:Equatable>(a : T) {
    store T
  }
}