enum Suit {}
enum Rank: Int {}

// In the example, let's say the Card is CustomStringConvertible so I can leverage all the external code
// that prints stuff, and depends on using the var description
struct Card : CustomStringConvertible {
  var rank: Rank
  var suit: Suit
  
  var description : String {
    return rank.simpleDescription() + suit.simpleDescription()
  }
}

// Define a protocol for specializing Arrays of Cards
protocol _CardType {}
extension Card: _CardType {}